- 常量成员,因为常量成员只能初始化不能赋值,所以必须放在初始化列表里面
- 引用类型,引用必须在定义的时候初始化,并且不能重新赋值,所以也要写在初始化列表里面
- 没有默认构造函数的类类型,因为使用初始化列表可以不必调用默认构造函数来初始化,而是直接调用拷贝构造函数初始化。
例:
class Student{
const int a;
Student(){
a = 1;//错误,实际上是赋值,即在已经定义了a的情况下的赋值
}
Student(int aa):a(aa){};//初始化列表
例2
引用:
http://www.cnblogs.com/graphics/archive/2010/07/04/1770900.html
struct Test1
{
Test1() // 无参构造函数
{
cout << "Construct Test1" << endl ;
}
Test1(const Test1& t1) // 拷贝构造函数
{
cout << "Copy constructor for Test1" << endl ;
this->a = t1.a ;
}
Test1& operator = (const Test1& t1) // 赋值运算符
{
cout << "assignment for Test1" << endl ;
this->a = t1.a ;
return *this;
}
int a ;
};
struct Test2
{
Test1 test1 ;
Test2(Test1 &t1)//拷贝构造函数
{
test1 = t1 ;
}
//初始化列表
Test2(Test1 &t1):test1(t1){}
};
调用代码:
Test1 t1;
Test2 t2(t1);//调用了拷贝构造函数
输出:
Construct Test1;
Construct Test1;
assignment for Test1;
若使用初始化列表
相同调用的输出为:
Construct Test1;
copy constructor for Test1;