C++构造函数初始化列表与赋值
初始化和赋值对内置类型的成员没有什么大的区别,像任一个构造函数都可以。但有的时候必须用带有初始化列表的构造函数:
(2) const成员或引用类型的成员。因为const对象或引用类型只能初始化,不能对他们赋值。
还有一个赋值次数,效率上的区别:
初始化参数列表在对象初始化时对成员变量赋值一次,
构造函数内直接赋值,对成员变量赋值两次,一次是对象构造是用默认值进行赋值,第二次是调用构造函数赋值
显然使用 构造函数初始化列表 的方式得到更高的效率
举例:
class Food { public: Food(int type = 10) { m_type = 10; } Food(Food &other) //拷贝构造函数 { m_type = other.m_type; } Food & operator =(Food &other) //重载赋值=函数 { m_type = other.m_type; return *this; } private: int m_type; }; (1)构造函数赋值方式 初始化成员对象m_food class Dog: public Animal { public: Dog(Food &food) //:m_food(food) { m_food = food; //初始化 成员对象 } private: Food m_food; }; //使用 Food fd; Dog dog(fd); // Dog dog(fd);结果: 先执行了 对象类型构造函数Food(int type = 10)——> 然后在执行 对象类型构造函数Food & operator =(Food &other) 想象是为什么? (2)构造函数初始化列表方式 class Dog: public Animal { public: Dog(Food &food) :m_food(food) //初始化 成员对象 { //m_food = food; } private: Food m_food; }; //使用 Food fd; Dog dog(fd); // Dog dog(fd);结果:执行Food(Food &other)拷贝构造函数完成初始化