施工期间的初始化?

时间:2015-10-15 04:08:05

标签: c++ initialization

我写了以下代码:

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


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

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

1 个答案:

答案 0 :(得分:11)

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

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

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