當初始化器清單中不能省略外大括號時
在C 中,在處理某些類型的初始化器清單時需要外大括號聚合結構,特別是那些普通舊資料型別(POD) 或缺少使用者定義的建構子的結構。與標準庫中的大多數容器不同,std::array 屬於這一類。
std::array 帶大括號的初始化
考慮以下範例:
std::array<A, 2> a1 = { {0, 0.1}, {2, 3.4} };
其中A 是具有兩個資料成員的結構。包含 {0, 0.1}、{2, 3.4} 的額外大括號是必要的,因為它初始化 std::array 的內部陣列。如果沒有它們,編譯器將報告“太多初始化程序”錯誤。
直接數組初始化
此行為類似於直接數組初始化:
Aarray a1 = { {0, 0.1}, {2, 3.4} };
這裡,Aarray結構體的內部數組資料被直接初始化。如果沒有外大括號,編譯器將遇到與 std::array 相同的錯誤。
與標量類型的比較
初始化標量類型(如 double)的陣列時,外大括號是可選的,因為標量類型不是聚合。例如:
std::array<double, 2> a2 = {0.1, 2.3};
在這種情況下,不需要額外的大括號,因為陣列的資料成員已經由初始化清單 {0.1, 2.3} 直接初始化。
以上是C 初始化器清單中何時需要「std::array」和類似聚合的外大括號?的詳細內容。更多資訊請關注PHP中文網其他相關文章!