构造函数初始化列表以一个冒号开始,接着是以逗号分隔的数据成员列表,每个数据成员后面跟一个放在括号中的初始化式。例如:
class CExample {
public:
int a;
float b;
//构造函数初始化列表
CExample(): a(0),b(8.8)
{}
//构造函数内部赋值
CExample()
{
a=0;
b=8.8;
}
};
两者在实现效果上一样,但是,从初始化列表和赋值两者字面上的意思,就能知道,两者肯定是有区别的,总结如下:
- 在性能上,使用初始化列表比赋值的方式高效
- 如果初始化的内部变量是一个类对象,而没有生命默认构造函数,那么,必须用初始化列表的方式。
- const成员必须使用初始化列表方式,引用类型的成员必须用初始化列表
建议尽量用初始化列表
初始化列表的执行顺序,是依据成员变量的定义顺序,从上往下进行初始化,而不是依据初始化列表的定义顺序进行初始化。