suninf 's blog

Enjoy From Programming And Technique

C++11:列表初始化

Catalog

列表初始化的语法{ 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';

参考

Comments