2015-10-15 7 views
9

Napisałem następujący kod:Inicjalizacja podczas budowy?

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


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

Teraz nie jestem pewien o inicjowanie b z a jak a(c), b(a). Czy jest to w porządku, czy może spowodować UB?

Odpowiedz

11

Tak, jest dobrze. Członkowie są inicjowani w kolejności, w jakiej są zadeklarowani w klasie. Zauważ, że kolejność inicjalizatorów nie ma znaczenia, więc będzie to też działać (ale nie byłoby dobre praktyki):

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

ale to nie będzie działać:

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

Niektóre kompilatory może dać ostrzeżenie, jeśli zamówienie inicjalizatora nie pasuje do kolejności deklaracji.

+8

Więc zainicjuj je w kolejności, w jakiej zostały zadeklarowane, lub możesz być zdezorientowany. –