3

我用 MSVC 10 尝试了以下代码片段,它工作正常。

enum
{
  FOO = (sizeof(void*) == 8 ? 10 : 20)
};

int main()
{
  return FOO;
}

我想知道的是:当所有操作数都是常量表达式时,C++ 标准(最好是 C++98)是否允许我在常量表达式中使用条件运算符,或者这是微软的怪癖/扩展?

4

1 回答 1

6

这是完全有效和明智的标准 C++。

三元条件运算符形成一个表达式,如果它的操作数是,则该表达式是一个常量表达式。

标准参考是 C++11 5.19/2:

条件表达式是核心常量表达式[...]

请注意,到 5.16,三元条件表达式是一种类型的条件表达式。其他类型是2 == 3.

于 2013-05-14T17:51:12.703 回答