首頁 >後端開發 >C++ >為什麼 `std::vector` 和 `std::array` 對初始值設定項清單使用不同的語法?

為什麼 `std::vector` 和 `std::array` 對初始值設定項清單使用不同的語法?

Patricia Arquette
Patricia Arquette原創
2024-11-08 12:18:02775瀏覽

Why do `std::vector` and `std::array` use different syntax for initializer lists?

了解std::vector 和std::array

​​> 的不同Initializer_list 行為

使用初始化器列表初始化容器時,一可能已經注意到std::vector 和std::array 之間的語法差異。 std::vector 使用單花括號 {} 進行初始化,而 std::array 則需要雙花括號 {{}}。為了理解為什麼會有這種區別,我們深入研究這些容器的基本屬性。

std::array:一個聚合

與 std::vector 不同, std::array 具有使用者定義的建構函數,被視為聚合類型。這意味著它缺少使用者宣告的建構函數,包括那些接受初始值設定項清單的建構函數。因此,std::array 的初始化依賴聚合初始化,這是從 C 繼承的 C 功能。

C 中的聚合初始化

C 中,聚合初始化可以透過兩種方式執行:

  1. 舊式: 利用🎜>
  2. 舊式: 利用=: 語法,例如std::array y = {{1, 2, 3, 4}};
直接列表初始化:

直接傳遞初始化列表,例如std::array y{1, 2, 3, 4};

使用舊樣式,在聲明中初始化時可以省略額外的大括號。但是,此選項不適用於直接清單初始化。

即將發生的變更


CWG 缺陷 #1270 試圖解決此限制,允許在其他中省略大括號清單初始化的形式。如果獲得批准,以下語法將變得有效:

std::array y{1, 2, 3, 4};

此變更將消除std::vector 和std::array 之間目前的語法差異,從而提供聚合初始化實踐的一致性。

以上是為什麼 `std::vector` 和 `std::array` 對初始值設定項清單使用不同的語法?的詳細內容。更多資訊請關注PHP中文網其他相關文章!

陳述:
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn