问问题
151 次
2 回答
2
当您尝试从相同类型的东西初始化聚合时,列表初始化并不完全有效。
这是CWG 1467,其决议(除其他事项外)在[dcl.init.list]/3中的巨型列表中引入了另一个项目符号来完成这项工作:
类型的对象或引用的列表初始化
T
定义如下:
- 如果
T
是一个类类型并且初始化器列表有一个类型为cvU
的元素,其中U
isT
或派生自 的类T
,则从该元素初始化对象(通过复制列表初始化的复制初始化,或通过直接初始化直接列表初始化)。
于 2016-03-22T19:07:01.287 回答
-1
当重载构造函数被解析时,大括号初始化将匹配使用 std::initializer_list 参数的构造函数,然后再考虑其他重载构造函数。所以
bar c{b};
将匹配采用 std::initializer_list 的构造函数,而不是生成的复制构造函数。
这在第 7 项中讨论:创建 Scott Meyers 的对象时区分 () 和 {} - 有效的现代 C++。
于 2016-03-22T12:02:28.290 回答