施工期间的初始化?

ste*_*lla 9 c++ initialization

我写了以下代码:

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


int main()
{
    A b(10);
}
Run Code Online (Sandbox Code Playgroud)

现在,我不确定baas 初始化a(c), b(a).可以这样做还是可能导致UB?

Vau*_*ato 11

是的,这没关系.成员按照在类中声明的顺序进行初始化.请注意,初始化程序的顺序无关紧要,因此这也可行(但不是好的做法):

struct A{
    int a;
    int b;
    A(int c): b(a), a(c) { }
};
Run Code Online (Sandbox Code Playgroud)

但这不起作用:

struct A{
    int b;
    int a;
    A(int c) : a(c), b(a) { } 
};
Run Code Online (Sandbox Code Playgroud)

如果初始化程序订单与声明顺序不匹配,某些编译器会向您发出警告.

  • 因此,按照声明的顺序初始化它们,否则您可能会感到困惑. (8认同)