包含數組的聚合的不明確初始化語法
在C 中,初始化包含數組的聚合時,省略花括號可能會導致混亂和錯誤。這在以下範例中很明顯:
// Error: Too many initializers std::array<A, 2> a1 = { {0, 0.1}, {2, 3.4} }; // Valid std::array<double, 2> a2 = {0.1, 2.3};
結構的std::array 需要大括號
第一個範例拋出錯誤,因為std:: array 是聚合且缺少使用者定義的建構子。其內部數組的初始化需要明確大括號,如更正版本所示:
std::array<A, 2> a1 = { {{0, 0.1}, {2, 3.4}} };
POD 的std::array 不需要大括號
相反, std::array
聚合的一致性
聚合成員需要大括號的原則也適用於其他類型的聚合,例如好吧:
// Valid B meow1 = {1, 2}; B bark1 = {{1, 2}}; C meow2 = {1, 2}; C bark2 = {{1, 2}};
D中的歧義
但是,以下範例會導致錯誤:
// Error: Too many initializers D meow3 = {{1, 2}, {3, 4}}; D bark3 = {{{1, 2}, {3, 4}}};
在 D 中,初始化器因為 foo 本身就是一個陣列。 meow3 中的大括號不明確,因為它們可以引用 foo 的初始化或其內部陣列。為了解決歧義,需要明確大括號,如 bark3 中。
初始化聚合的機制
當聚合初始化中省略大括號時,適用以下規則:
其他例子
以上是何時在陣列的 C 聚合初始化中使用大括號?的詳細內容。更多資訊請關注PHP中文網其他相關文章!