3

它在c++ 常量表达式的 msdn 页面上说:

非整数常量必须(显式或隐式)转换为整数类型才能在常量表达式中合法。因此,以下代码是合法的:

const double Size = 11.0;
char chArray[(int)Size];

至少在 VC++ 10.0 中,第二行会产生:“错误 C2057:预期的常量表达式”。那么它在其他一些编译器上是合法的,还是 msdn 页面完全错误?

4

2 回答 2

6

根据 5.19/1 :

一个整数常量表达式只能包含字面量 (2.13)、枚举数、const变量或整数或枚举类型的静态数据成员,这些成员使用常量表达式 (8.5)、整数或枚举类型的非类型模板参数和sizeof 表达式进行初始化。浮动文字 (2.13.3) 只有在转换为整数或枚举类型时才能出现

据我了解,该代码无效,而以下代码是合法的:

char chArray[(int)11.0];
于 2010-12-23T12:45:32.150 回答
3

根据标准 C++,这是不合法的。有关规范中的规则,请参见 5.19/2。

于 2010-12-23T12:40:37.327 回答