c ++初始化程序差异,有和没有=运算符

时间:2017-04-03 08:55:26

标签: c++11

初始化x1x2之间有什么区别?

struct X {
    int i;
};

void func(){
    X x1 = {2};
    X x2 {2};

    cout << x1.i << ", " << x2.i << endl;
}

1 个答案:

答案 0 :(得分:2)

X x1 = {2};

是copy-list-initialization。

X x2 {2};

是直接初始化。

两种语法都执行聚合初始化,因为X是聚合。

  

有什么区别

使用直接初始化形式不能省略大括号(直到C ++ 14)。

通常,复制初始化仅考虑非显式构造函数和转换函数,而直接初始化也考虑显式构造函数。但是,这不适用于聚合初始化。

  

有和没有=运算符

此处的等号(=)字符实际上不是运算符。它是复制初始化语法的一部分。