引入
C++11中为了统一初始化方式,提出了列表初始化(list-initialization)的概念。
例子
struct A
{
int x,y;
};
A a1{1,2};//a.x = 1;a.y = 2;
A a2 = {1,2};//a.x = 1;a.y = 2;
c++11扩展
在C++11中初始化列表被适用性被放大,可以作用于任何类型对象的初始化。
int a1{6};
int a2 = {6};
其实上面等价于int a = 6;
,但是使用列表初始化会更加严格。
int a1 = 6.6;
int a2 = 12345678910;
int a3{6.6};
int a4{12345678910};
上面前两行代码是正确的,但是编译器会给你警告,但是后两行代码是错误,,第三行出现了缩窄变化,即将浮点数变成整数,第四行将long long变成int(12345678910超过了int的范围)
class B
{
private:
int x,y;
public:
B(int _x,int _y){}
};
B b1{1,2};// B b1(1,2);
B b2 = {1,2};// B b1(1,2);
int *a1 = new int[3]{1,2};
/*
int *a1 = new int[3];
a1[0] = 1;
a[1] = 2;
*/
int *a2 = new int{2};
/*
int *a3 = new int(2);
*/