」工欲善其事,必先利其器。「—孔子《論語.錄靈公》
首頁 > 程式設計 > 為什麼 GCC 無法使用初始化清單初始化 std::array?

為什麼 GCC 無法使用初始化清單初始化 std::array?

發佈於2024-11-19
瀏覽:264

Why Does GCC Fail to Initialize std::array with Initialization Lists?

初始化清單和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