繁体   English   中英

非常量变量大小的编译时数组初始化

[英]compile-time array initialization with non-const variable size

我对数组初始化幕后发生的事情感到困惑。

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规则支持它。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM