使用非常量变量大小进行编译时数组初始化

compile-time array initialization with non-const variable size

本文关键字:编译 数组 初始化 非常 常量 变量      更新时间:2023-10-16

我对数组初始化的幕后发生了什么感到困惑。

int n= 3;
int a[n]; // compile succeeds

int n = 3;
int a[n] = {1, 2, 3};   // compile error

来自代码块的错误消息:

error: variable-sized object 'a' may not be initialized

我的理解是:第一个代码段,分配了 n 个元素但未初始化。第二个分配 n 个元素并将它们初始化为 {1, 2, 3} 。两者都做几乎相同的事情,但为什么第二个会导致错误。


请澄清我的理解或给我留下一些资源(我已经尝试过,但找不到接近的答案)。


编译器:mingw32-g++

在 C99 中,标准明确禁止 (6.7.8p3)

要初始化的实体的类型应为未知大小的数组或不是可变长度数组类型的对象类型。

尽管我们可以看到n是一个常量值,但它并没有被标记为常量值。

AFAIK,C++标准不允许可变长度数组(即 n不是constconstexpr),尽管大多数编译器都支持遵循C规则。