给定一个类,我们都知道,类的构造函数是用来初始化类中的成员的。那么类中成员变量初始化的先后顺序是依据什么确定的呢?
看下面一段程序:
#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
一句话说,类中成员变量被初始化的顺序与成员变量在类中声明的先后顺序一致。与构造函数中被初始化的先后顺序无关。