[英]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
被初始化為2
, b
被初始化為3
,最后一個成員c
也被初始化為0
。
我以前從未遇到過或見過它使用過,而且我在網上找不到任何提及(也許我正在使用錯誤類型的措辭進行搜索)。 這個 C++ 有文檔嗎?
是的,這是記錄在案的。 這種語法稱為列表初始化——更具體地說,因為類型是聚合:這是聚合初始化。
僅初始化結構或數組的前 n 個成員
不可能只初始化一些成員/元素。 如果您列出初始化類對象或數組,那么所有這些都將被初始化。 缺少初始化器的成員/元素將被初始化值。
如果你想這樣做,那么你可以做的是默認初始化類對象或數組,然后有選擇地初始化子對象。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.