簡體   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