c++11列表初始化

引入

  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);
 */

更多资料

posted @ 2018-03-17 21:14  h_hg  阅读(200)  评论(0编辑  收藏  举报