列表初始化的语法{ arg1, arg2, ... }
非常直观,合理使用能简化代码以及增强可读性。
列表初始化的常用语法
直接列表初始化
语法 | 语义 |
---|---|
T object { arg1, arg2, ... }; |
对象构造 |
T { arg1, arg2, ... }; |
临时对象构造 |
new T { arg1, arg2, ... } |
new构造对象 |
Class { T member { arg1, arg2, ... }; }; |
成员直接初始化 |
Class::Class() : member{arg1, arg2, ...} {... |
构造函数初始化列表 |
拷贝列表初始化
语法 | 语义 |
---|---|
T object = {arg1, arg2, ...}; |
对象初始化 |
function( { arg1, arg2, ... } ); |
函数参数 |
return { arg1, arg2, ... } ; |
返回值 |
object[ { arg1, arg2, ... } ] ; |
operator[]中使用 |
object = { arg1, arg2, ... } ; |
赋值 |
U( { arg1, arg2, ... } ) |
整体做为构造函数的一个参数 |
Class { T member = { arg1, arg2, ... }; }; |
成员赋值 |
std::initializer_list
类型
定义在头文件
template< class T >
class initializer_list;
std::initializer_list
支持列表初始化,还有begin, end方法来返回迭代器目前std::vector等类型已经支持
std::initializer_list
做为参数的构造函数,转换非常方便。// 使用 list-initialization 初始化 std::initializer_list<int> digits {1, 2, 3, 4, 5}; std::cout << "digits.size(): " << digits.size() << '\n'; // auto关键字:类型为 std::initializer_list<double> auto fractions = {3.14159, 2.71828}; std::cout << "fractions.size(): " << fractions.size() << '\n';