moo*_*are 3 c c++ conditional-operator constant-expression
我尝试使用MSVC 10的以下代码片段,它可以正常工作.
enum
{
FOO = (sizeof(void*) == 8 ? 10 : 20)
};
int main()
{
return FOO;
}
Run Code Online (Sandbox Code Playgroud)
我想知道的是:当所有操作数都是常量表达式时,C++标准(最好是C++ 98)是否允许我在常量表达式中使用条件运算符,或者这是Microsoft的怪癖/扩展?
这是完全有效且合理的标准C++.
三元条件运算符形成一个表达式,如果其操作数是表达式,则表达式是一个常量表达式.
标准参考是C++ 11 5.19/2:
甲条件表达式是一个核心常量表达式 [...]
请注意,到5.16,三元条件表达式是一种条件表达式.其他类型的东西是2 == 3.