我一直认为c ++中不允许使用可变长度数组(参考:Why aren't variable-length arrays part of the C++ standard?)。但是为什么这段代码编译和工作?
#include <iostream>
using namespace std;
int main () {
int n;
cin >> n;
int a[n];
for (int i=0; i<n; i++) {
a[i] = i;
}
for (int i=0; i<n; i++) {
cout << a[i] << endl;
}
}
答案 0 :(得分:4)
当前的C ++标准不要求编译器VLA。但是,允许编译器供应商支持VLA作为扩展。
最初提出VLA将出现在C ++ 14中,但该提案没有成功。他们可能会返回C ++ 17。
答案 1 :(得分:0)
C99允许VLA,但C ++从不允许这样做,因为VLA的性能非常不友好。在C11中,VLA成为可选功能。
之前,据说VLA会出现在C ++ 17中。但现在C ++ 17已经发布,而且没有VLA。 (而且似乎C ++ 20不会有VLA。最近的文件根本没有谈论它。)
虽然标准不支持它,但GNU编译器支持它作为扩展。