0

令我惊讶的是,这段代码可以完美地编译并运行而不会引发任何错误!

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 (prerelease)

4

2 回答 2

1

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

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

通常,std::vector如果您需要动态大小的数组,这是一种更安全、更便携的选择。

于 2012-09-05T10:06:11.607 回答
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<>.

于 2012-09-05T10:06:17.297 回答