Khi câu hỏi nêu, có lý do nào khiến mọi người sử dụng phiên bản cấu trúc trên các điều kiện thông thường không?Tại sao sử dụng tăng :: ice_or thay vì || và tăng :: ice_and thay vì && trong enable_if?
Trả lời
Một đoạn trích từ Boost Coding Guidelines for Integral Constant Expressions:
Không sử dụng toán tử logic trong các biểu thức hằng số tích phân; thay vào đó, hãy sử dụng lập trình meta mẫu.
Phần header chứa một số mẫu khắc phục, đó thực hiện vai trò của các nhà khai thác hợp lý, ví dụ thay vì:
INTEGRAL_CONSTANT1 || INTEGRAL_CONSTANT2
Sử dụng:
::boost::type_traits::ice_or<INTEGRAL_CONSTANT1,INTEGRAL_CONSTANT2>::value
Lý do: Một số trình biên dịch (đặc biệt là các trình biên dịch Borland và Microsoft), có xu hướng không nhận ra các biểu thức hằng số liên quan đến các toán tử logic như các biểu thức hằng số không đổi. Vấn đề thường chỉ xuất hiện khi biểu thức hằng số tích phân được lồng sâu bên trong mã mẫu và khó tái tạo và chẩn đoán.
Vì vậy, tôi muốn nói không bao giờ trên trình biên dịch tuân thủ. (Nhưng nếu bạn cần hỗ trợ các trình biên dịch không tuân thủ, hãy sử dụng nó.)
- 1. numpy.nextafter decrementing thay vì tăng
- 2. Tại sao frame-> pts tăng 20, thay vì 1?
- 3. sử dụng tín hiệu tăng thay vì qt
- 4. Tại sao sử dụng ROLAP thay vì MySQL đơn giản?
- 5. Trong mục tiêu-C, tại sao điều này tăng thêm 4 thay vì 1?
- 6. Tại sao sự mơ hồ với generics không phù hợp, thay vì tăng lỗi?
- 7. Tại sao foreach tăng số lần truy cập bằng 2 thay vì 1?
- 8. Tại sao sử dụng Enums thay vì Constants?
- 9. Tại sao nên sử dụng Function.prototype.bind thay vì Function.prototype.call?
- 10. Tại sao sử dụng tai thay vì chiến tranh?
- 11. tại sao nó sử dụng movl thay vì đẩy?
- 12. Tại sao sử dụng jQuery trên() thay vì nhấp chuột()
- 13. Tại sao sử dụng char [] thay vì String?
- 14. Tại sao sử dụng registerDefaults: thay vì setValue: forKey :?
- 15. Tại sao sử dụng Celery thay vì RabbitMQ?
- 16. Tại sao nên sử dụng GWT.create() thay vì mới?
- 17. Tại sao RTP sử dụng UDP thay vì TCP?
- 18. Tại sao memo.Lines sử dụng TStrings thay vì TStringList?
- 19. Tại sao UnderscoreJS sử dụng toString.call() thay vì typeof?
- 20. Android: tại sao phải sử dụng getBaseContext() thay vì
- 21. Tại sao sử dụng var thay vì tên lớp?
- 22. Tại sao sử dụng singleton thay vì lớp tĩnh?
- 23. Tại sao sử dụng singleton thay vì phương pháp tĩnh?
- 24. Tại sao darcs thay vì git?
- 25. Tại sao chặn thay vì lặp?
- 26. Tại sao FloatBuffer thay vì phao []?
- 27. Tại sao CHỌN 0, ... thay vì CHỌN
- 28. Tại sao testFixture thay vì TestClass?
- 29. Tại sao NDEBUG thay vì RELEASE?
- 30. Tại sao nhập javax.swing. * Thay vì java.swing. *
"đặc biệt là trình biên dịch Borland và ** Microsoft **" Oh sh ...! VS210 ở đây. : | Cảm ơn bạn đã cung cấp đoạn mã đó! – Xeo
@Xeo: Không sao cả. Đó là một sự xấu hổ họ không liệt kê các trình biên dịch, nhưng tôi thực sự nghi ngờ VC2010 cần nó. – GManNickG
@Xeo - Họ chắc chắn có nghĩa là VC6 vốn nổi tiếng cả về việc sử dụng quá rộng rãi và rất chuẩn. VS2010 không có vấn đề như vậy. –