我写了以下代码:
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?
答案 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) { }
};
如果初始化程序订单与声明顺序不匹配,某些编译器会向您发出警告。