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

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

Patricia Arquette
發布: 2024-11-08 12:18:02
原創
724 人瀏覽過

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中文網其他相關文章!

來源:php.cn
本網站聲明
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn
作者最新文章
熱門教學
更多>
最新下載
更多>
網站特效
網站源碼
網站素材
前端模板