施工期间初始化?

Initialization during construction?

我写了下面的代码:

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


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

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

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

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) { } 
};

如果初始化顺序与声明顺序不匹配,一些编译器会发出警告。