gpt4 book ai didi

c++ - 为什么C++ "fill"可以初始化可变大小的数组?

转载 作者:行者123 更新时间:2023-12-02 13:22:52 26 4
gpt4 key购买 nike

#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/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com