簡體   English   中英

帶有char數組的C ++ struct以不尋常的方式初始化為零

[英]C++ struct with char arrays initialize to zero in unusual way

遇到了一個非常見的c ++初始化代碼,似乎可以正常使用以下代碼...

struct sfoobar { char bar[10]; char foo[10]; };
...
sfoobar x { 0 };

這是將這些char數組初始化為零的可接受方法嗎?

這在C ++中有效。 作為效果sfoobar x { 0 }; x.barx.foo所有元素初始化為0

根據聚合初始化規則,可以省略嵌套初始化列表的大括號,

嵌套初始化程序列表周圍的大括號可以省略(省略),在這種情況下,必要時使用許多初始化子句來初始化相應子集合的每個成員或元素,后續的初始化子句用於初始化以下成員。賓語。

然后sfoobar x { 0 }; 表示將x.bar的第一個元素初始化為0 ,和

如果初始化程序子句的數量小於成員and bases (since C++17)或初始化程序列表完全為空,則其余成員and bases (since C++17) by their default initializers, if provided in the class definition, and otherwise (since C++14)空列表,按照通常的列表初始化規則(對非類型類和非聚合類使用默認構造函數執行值初始化,以及聚合初始化)對於聚合)。

因此,所有剩余的元素,包括x.bar的第2到第10個元素以及x.foo所有元素也將被初始化為0

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM