使用非const变量大小的编译时数组初始化

时间:2016-03-15 16:22:10

标签: c++ arrays initialization

我对阵列初始化的场景背后发生的事情感到困惑。

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

但是,

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

错误消息:

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

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

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

编译器: mingw32-g ++

1 个答案:

答案 0 :(得分:1)

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

  

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

即使我们可以看到n是一个常数值,但它没有被标记为。

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