像这样的C++ 教程说,所有数组的大小必须在程序运行之前确定。例如,这是不允许的:
cout << "How many variables do you want? ";
int nVars;
cin >> nVars;
int anArray[nVars]; // wrong! The size of the array must be a constant
但是这个微不足道的程序确实可以很好地编译和执行。应该吗?
这是由 C++ 编译器实现的常见扩展,例如 GNU 的 g++。使用标志编译-std=c++0x
以将此类声明视为错误。
它不应该在标准 C++ 中,但 gcc/g++ 和(我相信)MSVC 都支持这种可变长度数组的扩展。不过,您可以配置一些选项来禁用扩展,在这种情况下,代码将无法编译。
在 g++ 中,如果您使用-pedantic
.
现代 C/C++ 编译器允许使用变量来定义数组大小。结果与使用 alloca() 相同。这不是现在的标准,但 gcc 这样做,关于另一个 - 需要检查。