第二章构造函数语义学:成员初始化列表
记录一下第二章成员初始化列表的笔记
1.使用条件:构造函数中
2.使用情形:下列四种情况必须使用成员初始化列表
①初始化一个引用成员时
②初始化一个常量成员时
③调用一个基类的构造函数,而他拥有一组参数时
④调用一个成员类的构造函数,而他拥有一组参数时
3.编译器对初始化列表所做的工作
编译器将初始化列表的内容扩张到函数体内的用户代码之前(函数体开头),扩张的顺序按照类成员的声明顺序(与初始化列表中的顺序无关)(所以用初始化列表中的成员来初始化另一个成员时注意初始化顺序或者做好不要用)
class Word { int _cnt; string _name; public: Word():_name(0),_cnt(0){//...用户代码} }; //构造函数被扩张为: Word::Word() { _cnt=0; //注意顺序 _name.string::string(0);
//...用户代码 }
4.初始化列表中可以用成员函数来作为初值(不要用基类的函数)
class Word { int _cnt; string _name; int foo(); public: Word():_name(0),_cnt(foo()){//...用户代码} };
注:除了上述四种必须使用初始化列表的情况,书中建议最好在函数体内初始化