为什么C ++可以“填充”初始化可变大小的数组?

jin*_*hui 5 c++ arrays stack variable-length-array clang++

#include <iostream>
using namespace std;
void aa(int n) {
    int test[n] = {0};
}
int main() {
    aa(10);
    return 0;
}
Run Code Online (Sandbox Code Playgroud)

并得到

error: variable-sized object may not be initialized
Run Code Online (Sandbox Code Playgroud)

#include <iostream>
using namespace std;
void aa(int n) {
    int test[n];
    fill(test,test+10,0);
}
int main() {
    aa(10);
    return 0;
}
Run Code Online (Sandbox Code Playgroud)

还可以

我想知道为什么在前一个失败的情况下编译该文件的原因。

Evg*_*Evg 8

VLA不属于C ++。一些编译器支持它们作为扩展。它们来自C99,在C99中,您不能使用初始化 VLA = {0};。一些编译器(例如GCC)走得更远,并增加了对此类初始化的支持。在GCC中,此语法可从4.9版开始使用。Clang显然不支持它,也不必这样做。