C++ msdn页面上的打字错误“;C++;常量表达式;?

C++ msdn页面上的打字错误“;C++;常量表达式;?,c++,msdn,constant-expression,C++,Msdn,Constant Expression,上面说: 非整数常数必须为 转换(显式或非显式) 隐式地)到要 用固定的表达方式表达法律。 因此,下面的代码是 法律: 至少在VC++10.0上,第二行生成:“错误C2057:预期的常量表达式”。那么在其他编译器上合法吗?还是MSDN页面简单错误? < P>这是不合法的,根据标准C++。根据5.19/1,规范中的规则见5.19/2: 积分常数表达式可以 仅涉及文字(2.13), 枚举数,常量变量或 整数或整数的静态数据成员 枚举类型初始化为 常量表达式(8.5),非类型 整数或整数的模板参数 枚

上面说:

非整数常数必须为 转换(显式或非显式) 隐式地)到要 用固定的表达方式表达法律。 因此,下面的代码是 法律:


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

< P>这是不合法的,根据标准C++。根据5.19/1,规范中的规则见5.19/2:

积分常数表达式可以 仅涉及文字(2.13), 枚举数,
常量
变量
或 整数或整数的静态数据成员 枚举类型初始化为 常量表达式(8.5),非类型 整数或整数的模板参数 枚举类型和
sizeof
表情浮动文本 (2.13.3)只有在以下情况下才能出现: 转换为整数或枚举 类型

据我所知,该代码无效,但以下代码是合法的:

char chArray[(int)11.0];

g++编译它没有问题。这在java中是合法的:final double Size=11.0;char chArray=(int)大小@Sar:但这不是数组。这也是legel:final double Size=11.0;char[]chArray=新字符[(int)大小]@FredOverflow:大概是因为G++默认支持C99特性作为C++中的扩展,并且允许可变长度数组。VC++不支持C99。
char chArray[(int)11.0];