C++类成员变量初始化顺序

C++类成员变量初始化顺序

类成员初始化顺序与其在类中声明顺序一致。

比如

copy
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;
};

我们初始化一个类

copy
Demo d(10);
d.show();

运行后,得到

copy
d1 = 10
d2 = -858993450

它的结果并不是按照构造函数中的初始化顺序进行赋值的,如果按照"_d1{d}, _d2{_d1+10}"来看,结果应该是 "_d1 = 10; _d2 = 20"。

因为C++ 类初始化顺序与其成员变量声明顺序一致,所以是先初始化 _d2, 执行 "_d2{_d1+10}" 这条指令,由于__d1未被初始化,所以编译器会给它随机赋值,导致_d2是一个未知的结果。

posted @   RunTimeErrors  阅读(16)  评论(0编辑  收藏  举报
(评论功能已被禁用)
点击右上角即可分享
微信分享提示
🚀