最近在读Effective C++,有一些可能大家比较容易忽略的问题,特地写出来和大家分享一下!
Item4:Make sure that objects are initialized before they're used. (确保对象被使用前已经被初始化)
对于这个条款,相信大家都有了足够深入的了解,我只想提一点的就是赋值(assignments)和初始化(initializations)的区别.我将用一个实例来讲解二者的区别:
class Student { public: //*/ 赋值初始化 Student(const string &name, const int age, const string &gender) { m_name = name; m_age = age; m_gender = gender; } //*/ //*/ 初始化列表 Student(const string &name, const int age, const string &gender) : m_name(name), m_age(age), m_gender(gender) { } //*/ private: string m_name; int m_age; string m_gender; };
这里衍生出一个问题: 什么时候用初始化列表?什么时候用赋值初始化?
1. 对于基本数据类型,二者是没有区别的。
2. 对于非基本数据类型,比如:string,或者其他自定义的类,初始化列表的效率要比赋值初始化高!这是为什么呢?且看如下代码: