施工期间初始化?
Initialization during construction?
我写了下面的代码:
struct A{
int a;
int b;
A(int c): a(c), b(a){ }
};
int main()
{
A b(10);
}
现在,我不确定是否将 b
初始化为 a
作为 a(c), b(a)
。这样做可以吗还是会导致 UB?
是的,没关系。成员按照它们在 class 中声明的顺序进行初始化。请注意,初始化程序的顺序无关紧要,因此这也可以工作(但不是好的做法):
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) { }
};
如果初始化顺序与声明顺序不匹配,一些编译器会发出警告。
我写了下面的代码:
struct A{
int a;
int b;
A(int c): a(c), b(a){ }
};
int main()
{
A b(10);
}
现在,我不确定是否将 b
初始化为 a
作为 a(c), b(a)
。这样做可以吗还是会导致 UB?
是的,没关系。成员按照它们在 class 中声明的顺序进行初始化。请注意,初始化程序的顺序无关紧要,因此这也可以工作(但不是好的做法):
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) { }
};
如果初始化顺序与声明顺序不匹配,一些编译器会发出警告。