C++构造函数中初始化成员的先后顺序

给定一个类,我们都知道,类的构造函数是用来初始化类中的成员的。那么类中成员变量初始化的先后顺序是依据什么确定的呢?

看下面一段程序:

#include<iostream>
using namespace std;
class A
{
	int a;
	int b;
public:
	A() :b(0), a(b + 2){	}
	void print()
	{
		cout << "a = " << a << " ,b = " << b << endl;
	}
};
int main()
{
	A a;
	a.print();
	return 0;
}
结果:


根据结构分析,a是一个地址,并没有被初始化。b=0说明b被成功初始化了。为什么会有这样的结果呢,只有一个原因是a先被初始化,之后b才被初始化。(如果b先被初始化,a的值应该为2)

那么C++中成员变量初始化的次序与什么相关呢?

答案是:类中成员变量初始化的先后次序与变量在类中被定义的先后次序有关。从类定义可一个看出我们先定义了a,然后定了b。这样的话在constructor中会先初始化成员变量a,再初始化b。

因此,只要我们将类中int b;放在int a;前就可以达到预期效果:a = 2, b = 0

一句话说,类中成员变量被初始化的顺序与成员变量在类中声明的先后顺序一致。与构造函数中被初始化的先后顺序无关。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值