#include <iostream>
using namespace std;
void aa(int n) {
int test[n] = {0};
}
int main() {
aa(10);
return 0;
}
得到了
error: variable-sized object may not be initialized
但是
#include <iostream>
using namespace std;
void aa(int n) {
int test[n];
fill(test,test+10,0);
}
int main() {
aa(10);
return 0;
}
没问题
我想知道为什么这个能编译而前一个失败。
最佳答案
VLA 不是 C++ 的一部分。一些编译器支持它们作为扩展。它们来自C99,在C99 you cannot initialize VLA 带有 = {0};
。一些编译器(如 GCC)更进一步,添加了对此类初始化的支持。在 GCC 中,可以从 version 4.9 开始使用此语法。 。 Clang 显然不支持它,而且也不必支持。
关于c++ - 为什么C++ "fill"可以初始化可变大小的数组?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59026623/