9
我写了下面的代码:施工期间初始化?
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): 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) { }
};
一些编译器可以给如果初始化程序的顺序与声明顺序不匹配,则会发出警告。
所以按照它们声明的顺序对它们进行初始化,否则您可能会感到困惑。 –