2015-10-15 57 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

所以按照它们声明的顺序对它们进行初始化,否则您可能会感到困惑。 –