我尝试使用MSVC 10的以下代码片段,它可以正常工作。
enum
{
FOO = (sizeof(void*) == 8 ? 10 : 20)
};
int main()
{
return FOO;
}
我想知道的是:当所有操作数都是常量表达式时,C ++标准(最好是C ++ 98)是否允许我在常量表达式中使用条件运算符,或者这是Microsoft的怪癖/扩展?
答案 0 :(得分:6)
这是完全有效且合理的标准C ++。
三元条件运算符形成表达式,如果操作数为,则表达式为常量表达式。
标准参考是C ++ 11 5.19 / 2:
条件表达式是核心常量表达式 [...]
请注意,在5.16中,三元条件表达式是条件表达式的一种类型。其他类型的内容包括2 == 3
。