初始化列表的初始化顺序是根据 成员变量的声明顺序 来执行的。
class base
{
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;}
private:
int m_i; //先声明m_i
int m_j;
};
针对上面的类:
base obj(98);
cout<< obj.get_i()<<endl<<obj.get_j()<<endl;
输出: 随机数 加 98. 因为,m_i是首先被声明的,首先给m_i赋值,这时,m_j的之还是未知的!
交换两者的声明顺序即可得到期望的结果: 98 98
Ref:
《程序员面试宝典》--欧立奇