當對C 容器使用初始值設定項目清單時,std::vector 和std::vector 之間會出現令人困惑的差異std::陣列。讓我們探討一下這種行為背後的原因。
問題:
考慮以下程式碼:
std::vector<int> x{1,2,3,4}; std::array<int, 4> y{{1,2,3,4}};
為什麼需要使用雙捲曲
答案:
該行為源自於std::array
std::array<int, 4> y = { { 1, 2, 3, 4 } };
在這種舊式中,可以省略額外的大括號,從而產生等效的程式碼:
std::array<int, 4> y = { 1, 2, 3, 4 };
但是,只有在使用= 語法的舊式初始化時才允許省略大括號。直接列表初始化不使用 = 語法,不允許省略大括號。此限制受 C 11 §8.5.1/11 管轄。
提議的解決方案:
已提出缺陷報告(CWG 缺陷 #1270)來解決此問題限制。如果建議的解決方案被採納,所有形式的列表初始化都將允許大括號省略,包括以下內容:
std::array<int, 4> y{ 1, 2, 3, 4 };
此更改將為std::vector 和std::array 的行為帶來一致性使用初始值設定項目清單時。
以上是為什麼 std::array 需要雙花括號來初始化列表,而 std::vector 不需要?的詳細內容。更多資訊請關注PHP中文網其他相關文章!