一句话概括:
对于使用 brace-list ( 即花括弧 { }) 进行初始化的 auto变量,更新了 auto变量类型的推导规则,更新后的规则更加清晰。
更新后的规则如下:
- copy-initialization 的情况:
{ }里的变量类型需要完全一致, 此时 auto推导为 std::initializer_list类型;其他情况为语法错误。
auto x1 = { 1, 2 }; // decltype(x1) is std::initializer_list
auto x2 = {'c'}; // decltype(x1) is std::initializer_list
// error
auto x3 = { 1, 2.0 }; // error: element types not identical.
- direct-initialization 的情况:
如果 { }里只有单个元素, 则 auto变量类型推导为该元素类型 , 如int、double等。
如果 { }里有多个元素, 则为语法错误。
auto x4{ 1 }; // decltype(x4) is int
auto x5{ x1 }; // decltype(x5) is std::initializer_list
// error
auto x6{1, 2}; // error: multiple elements.
完整 demo 代码参见 gitee.com 上的公开代码仓库 : [auto_bound_list_initialization]



