是否可以为静态分配的整数数组指定变量作为大小说明符?

时间:2012-09-05 10:02:35

标签: c++ compilation static-array

我很惊讶这段代码编译完美而且没有任何错误!

int arraysize = 1000;
int array[arraysize];
for(int i=0; i<arraysize; i++)
{
    array[i] = i+1;
}

for(int i=0; i<arraysize; i++)
{
    cout << array[i];
}

编辑:使用的编译器:i386-linux-gnueabi-g ++(Linaro GCC 4.5-2012.01)4.5.4 20120105(预发布)

2 个答案:

答案 0 :(得分:1)

在C ++中,数组的大小必须是常量。如果要声明大小变量const,则可以使用它。

C允许可变长度数组(有时称为VLA),而某些C ++编译器提供这些作为扩展;这就是你的代码有效的原因。

通常,如果您需要动态大小的数组,std::vector是一种更安全,更便携的替代方案。

答案 1 :(得分:1)

这可能是您的编译器(GCC?)的一个功能,它允许C99可变长度数组。在C99中,定义诸如

之类的数组是有效的
int n;
scanf("%d", &n);
int array[n];
根据标准,C ++不支持可变长度数组,可能是因为它有更好的选择,即std::vector<>。尝试使用g++ -pedantic-errors file.cpp进行编译,您将收到

error: ISO C++ forbids variable-size array ‘array’

应该注意的是,可变长度数组不支持C ++类,这是在C ++中不打扰它们的另一个原因,而是使用std::vector<>