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

标签 c++ arrays stack clang++ variable-length-array

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

相关文章:

java - 输入存储在 Arraylist 或 String 数组中? (新程序员)Java

objective-c - 我可以导入和使用 Objective C 中的 Stack 类吗?

c - Double free error Stack pop 实现

c++ - 创建用于创建和打印 vector 的 C++ 类对象

c++ - 类:面向对象范式一直让我感到困惑

c++ - 如何从通用函数符号计算或指定COFF符号表的 "value"?

c++ - 动态访问结构体内部的变量 C++

java - 使用 Java 访问 JSONArray 中的项目成员

javascript - findIndex() 总是在包含对象的数组上返回 -1

uinavigationcontroller - 弹出 UINavigationController 时崩溃