2011-03-23 48 views

Trả lời

9

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ó.)

+0

"đặ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

+1

@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

+3

@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. –

Các vấn đề liên quan