5

正如问题所述,人们是否有理由使用 struct 版本而不是普通条件句?

4

1 回答 1

9

Boost Coding Guidelines for Integral Constant Expressions的摘录:

不要在整型常量表达式中使用逻辑运算符;改用模板元编程。

标头包含许多解决方法模板,它们履行逻辑运算符的角色,例如,而不是:

INTEGRAL_CONSTANT1 || INTEGRAL_CONSTANT2

采用:

::boost::type_traits::ice_or<INTEGRAL_CONSTANT1,INTEGRAL_CONSTANT2>::value

基本原理:许多编译器(尤其是 Borland 和 Microsoft 编译器)倾向于不将涉及逻辑运算符的整型常量表达式识别为真正的整型常量表达式。该问题通常仅在整数常量表达式嵌套在模板代码深处时才会出现,并且难以重现和诊断。

所以我会说永远不要使用兼容的编译器。(但如果您需要支持不兼容的编译器,请使用它。)

于 2011-03-23T04:31:17.240 回答