C++类成员变量初始化顺序
C++类成员变量初始化顺序
类成员初始化顺序与其在类中声明顺序一致。
比如
copyclass 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; };
我们初始化一个类
copyDemo d(10); d.show();
运行后,得到
copyd1 = 10 d2 = -858993450
它的结果并不是按照构造函数中的初始化顺序进行赋值的,如果按照"_d1{d}, _d2{_d1+10}"来看,结果应该是 "_d1 = 10; _d2 = 20"。
因为C++ 类初始化顺序与其成员变量声明顺序一致,所以是先初始化 _d2, 执行 "_d2{_d1+10}" 这条指令,由于__d1未被初始化,所以编译器会给它随机赋值,导致_d2是一个未知的结果。
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步