c ++中是否有可变长度数组?

时间:2014-02-25 11:55:01

标签: c++ variable-length-array gcc-extensions clang-extensions

我一直认为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;
    }
}

2 个答案:

答案 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编译器支持它作为扩展