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是一个未知的结果。

posted @ 2024-09-23 14:38  RunTimeErrors  阅读(9)  评论(0编辑  收藏  举报