首頁 > 後端開發 > C++ > 主體

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

Linda Hamilton
發布: 2024-10-29 04:41:02
原創
647 人瀏覽過

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

初始化清單和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中文網其他相關文章!

來源:php.cn
本網站聲明
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn
作者最新文章
熱門教學
更多>
最新下載
更多>
網站特效
網站源碼
網站素材
前端模板
關於我們 免責聲明 Sitemap
PHP中文網:公益線上PHP培訓,幫助PHP學習者快速成長!