初始化列表中的成员列出的顺序和它们在类中声明的顺序相同
class A
{
public:
A(int a):j(a),i(j*2)
{
cout<<"A constructor"<<endl;
}
void Get() const
{
cout<<"i="<<i<<endl<<"j="<<j<<endl;
}
private:
int i;
int j;
};
int main()
{
A a(10);
a.Get();
return 0;
}
执行结果:
i = -1717986920
j = 10
造成这种结果的原因是类的成员是按照它们在类里声明的顺序初始化的,和它们在成员初始化表中的顺序无关。在这里是先初始化i,再初始化j,所以i为未初始化的值。