初始化清單和std::array:GCC Bug
C 標準庫中的std::array 類別提供了一個固定的-大小數組容器。人們普遍認為此類支援初始化列表。
但是,使用GCC 4.6.1,嘗試使用以下語法初始化std::array 實例會失敗:
std::array<:string> strings = { "a", "b" };
std::array<:string> strings({ "a", "b" });
儘管初始化清單與std::vector 一起使用,但std::array 的這種行為已經引發有關C 標準或潛在GCC 問題的問題。
std::array 的內部工作
std::array 本質上是一個封裝陣列的結構體。其結構類似:
template
struct std::array {
T a[size];
};
與具有接受初始值設定項清單的建構子的 std::vector 不同,std::array 缺少這樣的建構子。
聚合初始化
雖然 std::array 沒有用於初始化列表的明確構造函數,但它在 C 11 中被視為聚合類型。因此,它可以聚合初始化。但是,要初始化結構體中的數組,需要一組附加的大括號:
std::array<:string> strings = {{ "a", "b" }};
潛在的GCC Bug
C 標準允許在此類初始化中省略額外的大括號。因此,如果沒有它們,GCC 無法處理此語法很可能是錯誤。
免責聲明: 提供的所有資源部分來自互聯網,如果有侵犯您的版權或其他權益,請說明詳細緣由並提供版權或權益證明然後發到郵箱:[email protected] 我們會在第一時間內為您處理。
Copyright© 2022 湘ICP备2022001581号-3