关于构造函数初始化列表顺序的面试题

#include <iostream>
#include <string>

using namespace std;

class base
{
private:
        //调换下面两个声明则会输出预想的98,98.否则输出结果第一个为随机数,第二个
        //为98
	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;}
};

void main()
{
	base obj(98);
	cout << obj.get_i() << endl
		 << obj.get_j() << endl;
	system("pause");
}


分析:初始化列表的初始化顺序是根据成员变量的声明顺序来执行的,所以m_i会被赋值为一个随机数。更改一下成员变量的申明顺序可以得到预想的结果。

你可能感兴趣的:(C++,c,面试,C#,J#)