C++11 c++;初始值设定项差异,带和不带=运算符

C++11 c++;初始值设定项差异,带和不带=运算符,c++11,C++11,初始化x1和x2之间有什么区别 struct X { int i; }; void func(){ X x1 = {2}; X x2 {2}; cout << x1.i << ", " << x2.i << endl; } struct X{ int i; }; void func(){ xx1={2}; xx2{2}; 库特 是复制列表初始化 是直接初始化 这两个语法都执行聚合初始化,因为X是一个聚合 有

初始化
x1
x2
之间有什么区别

struct X {
    int i;
};

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

    cout << x1.i << ", " << x2.i << endl;
}
struct X{
int i;
};
void func(){
xx1={2};
xx2{2};
库特
是复制列表初始化

是直接初始化


这两个语法都执行聚合初始化,因为
X
是一个聚合


有什么区别

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

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


带和不带=运算符

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

是复制列表初始化

是直接初始化


这两个语法都执行聚合初始化,因为
X
是一个聚合


有什么区别

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

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


带和不带=运算符


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

可能重复的@101010似乎没有关系。@Manoj在那个问题中,使用了()运算符。我使用了{}运算符。对不起。…可能重复的@101010似乎没有关系。@Manoj在那个问题中,()使用了运算符。我使用了{}operator.oops对不起…@UDPLover聚合初始化和聚合初始化之间没有性能差异。@UDPLover聚合初始化和聚合初始化之间没有性能差异。
X x1 = {2};
X x2 {2};