我一直认为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编译器支持它作为扩展名

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top