【问题标题】:Conditional-Operator in Constant Expression常量表达式中的条件运算符
【发布时间】:2013-05-14 17:50:29
【问题描述】:

我在 MSVC 10 中尝试了以下代码 sn-p,它运行良好。

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

int main()
{
  return FOO;
}

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

【问题讨论】:

    标签: c++ c conditional-operator constant-expression


    【解决方案1】:

    这是完全有效且合理的标准 C++。

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

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

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

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

    【讨论】:

    • 您能向我解释一下标准中是如何定义的吗?显然例如(C99 6.6/6) 描述了整型常量表达式,但对运算符没有多说。
    • @mooware:我以为你在问 C++?在常量表达式(至少 C89)方面,C 有很大的不同。我很高兴让其他人挖掘 C 引用。
    • 是的,我问的是 C++,但这是我在 SO 上找到的第一个参考。很抱歉给您带来困惑,感谢您的回答。
    • 完美的答案证明了Maxim在这篇文章中的回答:stackoverflow.com/a/7039269/893406
    猜你喜欢
    • 1970-01-01
    • 2019-02-10
    • 1970-01-01
    • 1970-01-01
    • 2020-03-30
    • 2010-09-18
    • 1970-01-01
    • 2016-09-21
    • 1970-01-01
    相关资源
    最近更新 更多