构造期间的初始化

Initialization during construction?

本文关键字:初始化      更新时间:2023-10-16

我写了以下代码:

struct A{
    int a;
    int b;
    A(int c): a(c), b(a){ }
};

int main()
{
    A b(10);
}

现在,我不确定是否使用 a 初始化b作为a(c), b(a)。这样做可以还是可能导致 UB?

是的,这没关系。 成员按照它们在类中声明的顺序进行初始化。 请注意,初始值设定项的顺序无关紧要,因此这也有效(但不是好的做法(:

struct A{
    int a;
    int b;
    A(int c): b(a), a(c) { }
};

但这行不通:

struct A{
    int b;
    int a;
    A(int c) : a(c), b(a) { } 
};

如果初始值设定项顺序与声明顺序不匹配,某些编译器可能会发出警告。