性能问题之外,有些时场合初始化列表是不可或缺的,以下几种情况时必须使用初始化列表
Error1(constchar* constmsg) :data(msg)
{
//data = msg;
}
classError2
{
constchar* const data;
public:
Error2(constchar* constmsg = 0) :data(msg){}//Error2()
};
classError1
{
constchar* const data;
Error2 e2;
public:
Error1(constchar* constmsg=0) :data(msg)
{
// e2 = e2Out;
//data = msg;
}
//Error1(const char* const msg = 0) :data(msg){}
Error1(constchar* constmsg, Error2 & e2Out) :data(msg), e2(e2Out)
{
//e2 = e2Out;
//data = msg;
}
};
if not, there will be a waring,struct Test2 { Test1 test1 ; Test2(Test1 &t1):test1(t1){} }
使用同样的调用代码,输出结果如下。
第一行输出对应 调用代码的第一行。第二行输出对应Test2的初始化列表,直接调用拷贝构造函数初始化test1,省去了调用默认构造函数的过程。所以一个好的原则是,能使用初始化列表的时候尽量使用初始化列表。
The initialize list of C++ Class
原文:http://www.cnblogs.com/gaoxianzhi/p/4440136.html