首頁 >後端開發 >C++ >C 初始化器清單中何時需要「std::array」和類似聚合的外大括號?

C 初始化器清單中何時需要「std::array」和類似聚合的外大括號?

Susan Sarandon
Susan Sarandon原創
2024-12-05 03:17:18793瀏覽

When Are Outer Braces Required in C   Initializer Lists for `std::array` and Similar Aggregates?

當初始化器清單中不能省略外大括號時

在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中文網其他相關文章!

陳述:
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn