我問是因為auto推斷{}是initializer_list。我不知道核心語言依賴于這樣的標準庫中的任何其他類。你可以洗掉vectororarray并且 C 仍然可以運行,但是洗掉initializer_list它就會崩潰。
uj5u.com熱心網友回復:
你所說的{}(特別是= {...})標準呼叫copy-list-initialization。
是的,在標準的措辭std::initializer_list中給予了特殊考慮。
如果占位符型別說明符的形式為type-constraint ,則使用模板引數推導規則確定替換 T
auto的推導型別。T如果初始化是復制串列初始化,則應在 ([basic.lookup.general])占位符型別說明符之前宣告。std?::?initializer_-list
[Example 1:
auto x1 = { 1, 2 }; // decltype(x1) is std?::?initializer_-list<int>
auto x2 = { 1, 2.0 }; // error: cannot deduce element type
auto x3{ 1, 2 }; // error: not a single element
auto x4 = { 3 }; // decltype(x4) is std?::?initializer_-list<int>
auto x5{ 3 }; // decltype(x5) is int
轉載請註明出處,本文鏈接:https://www.uj5u.com/qukuanlian/535449.html
標籤:C 语言律师初始化列表
