初始化清單和std::array:一個GCC Bug
C 標準庫中的std::array 類別提供了一個固定的-大小數組容器。人們普遍認為此類支援初始化列表。
但是,使用GCC 4.6.1,嘗試使用以下語法初始化std::array 實例會失敗:
<code class="cpp">std::array<std::string, 2> strings = { "a", "b" }; std::array<std::string, 2> strings({ "a", "b" });</code>
儘管有初始化清單使用std::vector 時,std:: array 的這種行為引發了有關C 標準或潛在GCC 問題的問題。
std::array 的內部工作
std::array 本質上是一個封裝數組的結構體。它的結構類似於:
<code class="cpp">template<typename T, int size> struct std::array { T a[size]; };</code>
與具有接受初始化列表的建構子的 std::vector 不同,std::array 缺少這樣的建構子。
聚合初始化
雖然 std::array 沒有用於初始化列表的明確構造函數,但它在 C 11 中被視為聚合類型。因此,它可以聚合初始化。然而,要初始化結構體中的數組,需要一組額外的大括號:
<code class="cpp">std::array<std::string, 2> strings = {{ "a", "b" }};</code>
潛在的GCC Bug
C 標準允許省略此類初始化中的額外花括號。因此,如果沒有它們,GCC 無法處理此語法很可能是錯誤。
以上是為什麼 GCC 無法使用初始化清單初始化 std::array?的詳細內容。更多資訊請關注PHP中文網其他相關文章!