C++类成员变量初始化顺序
C++类成员变量初始化顺序
类成员初始化顺序与其在类中声明顺序一致。
比如
class Demo {
public:
Demo(int d)
:_d1{d},_d2{_d1+10}
{
}
void show() {
std::cout << "d1 = " << _d1 << std::endl;
std::cout << "d2 = " << _d2 << std::endl;
}
private:
int _d2;
int _d1;
};
我们初始化一个类
Demo d(10);
d.show();
运行后,得到
d1 = 10
d2 = -858993450
它的结果并不是按照构造函数中的初始化顺序进行赋值的,如果按照"_d1{d}, _d2{_d1+10}"来看,结果应该是 "_d1 = 10; _d2 = 20"。
因为C++ 类初始化顺序与其成员变量声明顺序一致,所以是先初始化 _d2, 执行 "_d2{_d1+10}" 这条指令,由于__d1未被初始化,所以编译器会给它随机赋值,导致_d2是一个未知的结果。