将构造函数分为两个阶段的执行过程:初始化阶段和构造函数函数体阶段。
既然称它为成员初始化列表,那么该阶段在初始化阶段完成。
那么类成员变量不外乎类类型和非类类型。而对于非类类型而言,此时
无论是在初始化表中还是函数体内完成赋值效果是一致的,即并未初始化。
表现的有点不同的是类类型:
test1:
#include<iostream>
using namespace std;
class B
{
public:
B()
{
cout<<"B()"<<endl;
}
B(int i)
{
cout<<"B(int i)"<<endl;
}
};
class A
{
public:
A()
{
cout<<"A()"<<endl;
}
private:
B b;
};
int main()
{
A a;
return 0;
}
B类的默认构造函数被调用来初始化 b 对象了,也就是说对于类类型对象将调用它的默认构造函数完成初始化。
如果在成员初始化列表中显示地用B类接收int 形参的构造函数会怎么样:
test2: