MSDN页面“C++常量表达式”存在错别字吗?

3

C++常量表达式的MSDN页面上说:

Nonintegral constants must be converted (either explicitly or implicitly) to integral types to be legal in a constant expression. Therefore, the following code is legal:

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

至少在VC++ 10.0上,第二行会产生“error C2057:期望常量表达式”的错误。那么在其他编译器上是否合法,还是MSDN页面简单地错误了?


g++ 可以顺利编译此代码。 - fredoverflow
这是Java中合法的代码:final double Size = 11.0; char chArray = (int) Size; - user284291
1
@Sar:但那不是一个数组。 - fredoverflow
这也是合法的: final double Size = 11.0; char[] chArray = new char[(int) Size]; - user284291
@Sarang:Java中合法的东西与C++中合法的东西有什么关系呢?你在那段代码片段中使用了final,而这在C++中肯定是不合法的... - Billy ONeal
显示剩余3条评论
2个回答

6
根据5.19/1:
一个整数常量表达式只能包含文字(2.13),枚举器,被初始化为常量表达式(8.5)的整型或枚举型的静态数据成员或const变量,整型或枚举型的非类型模板参数和sizeof表达式。浮点文字(2.13.3)只有在被强制转换为整型或枚举类型时才能出现。
根据我的理解,代码无效,而以下内容是合法的:
char chArray[(int)11.0];

3

根据C++标准,这是不合法的。请参考规范中的5.19/2章节了解相关规则。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接