它说 C ++常数表达式的MSDN页面 那:

必须将非整合常数(明确或隐式)转换为整体类型,以在恒定的表达中合法。因此,以下代码合法:

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

至少在VC ++ 10.0上,第二行产生:“误差C2057:预期恒定表达式”。因此,在其他一些编译器上是合法的,还是MSDN页面简直是错误的?

有帮助吗?

解决方案

根据5.19/1:

一个 积分常数表达 只能涉及文字(2.13),枚举者, const 变量 或静态数据成员 整体或枚举类型 用常数表达式(8.5),积分或枚举类型的非类型模板参数以及 sizeof表达。 浮动文字(2.13.3)只有在将其投入到积分或枚举类型的情况下才能出现.

从我的理解中,代码无效,而以下内容是合法的:

char chArray[(int)11.0];

其他提示

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

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top