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) { }
};
一些編譯器可以給如果初始化程序的順序與聲明順序不匹配,則會發出警告。
所以按照它們聲明的順序對它們進行初始化,否則您可能會感到困惑。 –