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

nik*_*yas 6 c++ variable-length-array gcc-extensions clang-extensions

我一直认为c ++中不允许使用变长数组(参考:为什么变量长度数组不是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;
    }
}
Run Code Online (Sandbox Code Playgroud)

Dav*_*nan 6

当前的 C++ 标准不要求编译器支持 VLA。但是,允许编译器供应商支持 VLA 作为扩展。例如,GCC >= 4.7 确实如此。

最初提议 VLA 将出现在 C++14 中,但该提议没有成功。它们最终也没有出现在 C++17 中。

  • @马蒂厄M。运行时大小的数组是 C++14 的一部分。它们与 C VLA 并不完全相同。问题中的代码在 C99 中的工作方式与 C++14 相同。好吧,对`cout` 等的使用进行模数。它的数组部分是我关注的内容。 (2认同)