繁体   English   中英

条件包含:整数常量表达式是无限的?

[英]Conditional inclusion: integral constant expression is unlimited?

根据 C++11(和更新版本),此代码有效:

#if 1.0 > 2.0 ? 1 : 0
#endif

但是,大多数(如果不是全部) C++ 编译器拒绝它:

$ echo "#if 1.0 > 2.0 ? 1 : 0" | g++ -xc++ - -std=c++11 -pedantic -c
<stdin>:1:5: error: floating constant in preprocessor expression
<stdin>:1:11: error: floating constant in preprocessor expression

N4849 有这个(强调):

控制条件包含的表达式应该是一个整型常量表达式,除了标识符(包括那些在词法上与关键字相同的)被解释如下所述 143 并且它可以包含零个或多个定义的宏表达式和/或 has-include-expressions 和/或 has-attribute-expressions 作为一元运算符表达式。

这(强调):

整型常量表达式是整型或无范围枚举类型的表达式,隐式转换为纯右值,其中转换后的表达式是核心常量表达式。

1.0 > 2.0? 1: 0 1.0 > 2.0? 1: 0是整数常量表达式。

那么,C++ 标准在哪里禁止在控制条件包含的表达式中使用浮点文字?

理查德史密斯的回答:

这是标准措辞中的错误。 有关详细信息和建议的修复,请参阅http://www.open-std.org/jtc1/sc22/wg21/docs/cwg_active.html#1436 - 尽管已知该修复也是错误的(它允许 lambda 表达式) .

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM