以下代码在gcc 4.8和Clang 3.2下编译:
int main()
{
int size = 10;
int arr[size];
}
Run Code Online (Sandbox Code Playgroud)
C++标准的8.3.4/1表示数组的大小必须是一个整数常量表达式,这size似乎不是.这是两个编译器中的错误,还是我错过了什么?
最新的VC++ CTP用这个有趣的消息拒绝代码:
error C2466: cannot allocate an array of constant size 0
Run Code Online (Sandbox Code Playgroud)
有趣的是,它似乎认为size是零.但至少它拒绝了代码.gcc和Clang应该不一样吗?
c++ arrays compile-time-constant variable-length-array c++11
GNU g ++编译器中有一些扩展,例如VLA(可变长度数组),即使这些功能不是C++标准.
因此,如果我只需要使用C++标准结构编译程序并避免这些额外的扩展,我可以使用GNU g ++吗?
有点像g++ test.cpp -std=onlyStandards?
当我运行以下代码时,它适用于C:
#include<stdio.h>
int main(void)
{
const int x=5;
char arr[x];
printf("%d",sizeof(arr));
}
Run Code Online (Sandbox Code Playgroud)
但是,不仅我之前读过const合格的变量不是real常量(这就是为什么它们不能在case条件下使用switch-case),但IBM的以下链接证实了(IBMLINK)并说:
const int k = 10;
int ary[k]; /* allowed in C++, not legal in C */
Run Code Online (Sandbox Code Playgroud)
为什么我允许const在C中使用合格变量作为数组大小而没有任何错误?