统一的初始化
对于普通数组和POD类型(可以直接memcpy复制的对象)C++98/03可以使用初始化列表进行初始化,只有这两种数据类型可以使用初始化列表。
int arr[3]={1,2,3};
struct A
{
int x;
int y;
} a = {1,2};
在C++11中,初始化列表可以用于任何类型对象的初始化
在C++11中,可以直接在变量名后面跟上初始化列表,来进行对象的初始化。这是C++98/03锁不具备的。
new操作符等可以用圆括号进行初始化的地方,也可以使用初始化列表:
int *a = new int {123};
double b = double{12.12};//对匿名对象使用初始化列表后,再进行拷贝初始化
int *arr = new int[3] {1,2,3};//堆上动态分配的数组也可以使用初始化列表进行初始化
列表初始化还可以用于函数的返回值上:
struct Foo
{
Foo(int, double){}
};
Foo func(void)
{
return {123, 12.12};
}
这里的return就如同返回了一个Foo(123,12.12)一样。
使用细节
聚合类型的定义:
(1)类型是一个普通数组(如int[10]、char[]、long[2][3])。