类中成员变量的声明顺序与初始化顺序之间的关系

以一个例子来看:

eg:

#include<iostream>
#include<string>
using namespace std;

class base
{
private:
int m_j;
int m_i;
public:
base(int i) :m_j(i), m_i(m_j){}
base() :m_j(0), m_i(m_j){}
int get_i(){ return m_i; }
int get_j(){ return m_j; }
};

int main(int argc, char*argv[])
{
base obj(98);
cout << obj.get_i() << endl << obj.get_j() << endl;
return 0;
}

输出结果:98

98

 

将上述程序修改一下:

#include<iostream>
#include<string>
using namespace std;

class base
{
private:
int m_i;
int m_j;
public:
base(int i) :m_j(i), m_i(m_j){}
base() :m_j(0), m_i(m_j){}
int get_i(){ return m_i; }
int get_j(){ return m_j; }
};

int main(int argc, char*argv[])
{
base obj(98);
cout << obj.get_i() << endl << obj.get_j() << endl;
return 0;
}

输出结果为:

-8589934609(一个随机数)

98

 

分析可得知:

初始化列表的初始化变量顺序是根据成员变量的声明顺序来执行的。

你可能感兴趣的:(类中成员变量的声明顺序与初始化顺序之间的关系)