簡體   English   中英

僅初始化結構或數組的前 n 個成員

[英]Initialise first n members only of struct or array

我正在使用 RAD studio 10.2 附帶的 clang 編譯器(我認為是 c++ 11)。 我今天錯誤地發現結構或數組的前 n 個成員可以使用通常的大括號進行分配,例如

int a[500]={1};
struct {int a,b,c;} st={2,3};

上面的編譯和工作正常,但我從來沒有遇到過這個或見過它以前使用過,我在網上找不到它的提及(也許我正在使用錯誤類型的措辭進行搜索)。 這個 C++ 有文檔嗎?

對於聚合初始化

(強調我的)

如果初始化子句的數量少於成員and bases (since C++17)或初始化器列表完全為空,則剩余的成員and bases (since C++17) by their default member initializers, if provided in the class definition, and otherwise (since C++14)由空列表提供,根據通常的列表初始化規則(它對具有默認構造函數的非類類型和非聚合類執行值初始化,並聚合聚合初始化)。

這意味着,對於int a[500]={1}; ,第一個元素被初始化為1 ,數組的其余 499 個元素被值初始化為0 對於struct {int a,b,c;} st={2,3}; ,成員a被初始化為2b被初始化為3 ,最后一個成員c也被初始化為0

我以前從未遇到過或見過它使用過,而且我在網上找不到任何提及(也許我正在使用錯誤類型的措辭進行搜索)。 這個 C++ 有文檔嗎?

是的,這是記錄在案的。 這種語法稱為列表初始化——更具體地說,因為類型是聚合:這是聚合初始化。

僅初始化結構或數組的前 n 個成員

不可能只初始化一些成員/元素。 如果您列出初始化類對象或數組,那么所有這些都將被初始化。 缺少初始化器的成員/元素將被初始化值。

如果你想這樣做,那么你可以做的是默認初始化類對象或數組,然后有選擇地初始化子對象。

暫無
暫無

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

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