在C ++中是可变长度阵列吗?
-
21-12-2019 - |
题
我一直认为c ++中不允许变量长度阵列(参见:为什么aren'T可变长度阵列的C ++标准的一部分?)。但这比为什么这个代码编译和工作?
#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;
}
}
. 解决方案
当前的C ++标准不需要该编译器VLA。但是,允许编译器供应商支持VLA作为扩展名。
最初提议VLA将出现在C ++ 14中,但提案没有成功。他们可能会返回C ++ 17。
其他提示
c99允许VLA,但C ++永远不会允许,因为VLA的性能非常不友好。在C11中,VLA成为可选功能。
之前,它表示VLA将出现在C ++ 17。但现在C ++ 17发布,也没有VLA。(似乎C ++ 20不会有VLA。最近的文件根本没有谈论它。)
虽然标准不支持它,但GNU编译器支持它作为扩展名。
不隶属于 StackOverflow