簡體   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