【发布时间】:2012-06-07 03:56:27
【问题描述】:
示例
int main()
{
const int i = 1.0; // Notice I am assigning a double to an int here
char a[i];
}
问题
使用g++ -O0 -Wall -pedantic -ansi -std=c++11 编译上述代码不会出现错误(未使用的变量除外)。但是,如果我删除 -std=c++11,我会收到以下警告:
警告:ISO C++ 禁止变长数组
根据this SO question,我相信在C++03中,代码是无效的。但是,有人可以解释一下 C++11 中的规则是如何变化的吗?
(这个问题是a previous question我回答的结果。)
【问题讨论】:
-
您的意思是让
i成为双精度型,而不是整数型? -
@Dave:不,这是故意的。请参阅上一个问题的链接。
-
FWIW,clang++ 3.0 不显示 VLA 警告。我没有 g++ 来测试它,但我想如果您将分配更改为
const int i = 1;,警告不会消失。是吗? -
@jweyrich:在 clang++ 3.1 上使用
-pedantic编译会给出类似的警告。如果您将其更改为const int i = 1;,警告就会消失。