我们知道,在C++98/03中的对象初始化方法有很多种,如代码清单1-7所示。
代码清单1-7 对象初始化示例
// initializer list int i_arr[3] = { 1, 2, 3 }; // 普通数组 struct A { int x; struct B { int i; int j; } b; } a = { 1, { 2, 3 } }; // POD 类型 // 拷贝初始化(copy-initialization) int i = 0; class Foo { public: Foo(int) {} } foo = 123; // 需要拷贝构造函数 // 直接初始化(direct-initialization) int j(0); Foo bar(123);
这些不同的初始化方法,都有各自的适用范围和作用。最关键的是,这些种类繁多的初始化方法,没有一种可以通用所有情况。
为了统一初始化方式,并且让初始化行为具有确定的效果,C++11中提出了列表初始化(List-initialization)的概念。