2015-10-15 85 views
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?

回答

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

一些編譯器可以給如果初始化程序的順序與聲明順序不匹配,則會發出警告。

+8

所以按照它們聲明的順序對它們進行初始化,否則您可能會感到困惑。 –