高质量程序设计指南c++/c语言(4)--构造函数的成员初始化列表

      我们一般习惯在构造函数体内进行初始化数据成员,然而这不是真正意义上的初始化,而是赋值。真正的初始化是使用所谓的初始化表达式表(简称初始化列表)进行的,该列表里的初始化工作发生在函数体内的任何代码被执行之前。

(1)类的非静态const数据成员和引用数据成员只能在初始化列表里初始化,因为他们只存在初始化语义,而不存在赋值语义。

(2)类的数据成员的初始化可以采用初始化表或函数体内赋值两种方式。这两种方式的效率不完全相同。

class A
{
};

class B
{
public:
    B(const A &a);
private:
    A m_a;
};

//(1)
B::B(const A &a):m_a(a)
{}

//(2)
B::B(const A &a)
{
    m_a = a;
}

第二种方式实际上是这样的:先暗地里创建m_a对象(调用了A的默认构造函数),在调用A的赋值函数,才将a赋值给m_a,显然第一种方式的效率比第二种高。

posted on 2013-04-26 16:06  江在路上2  阅读(159)  评论(0编辑  收藏  举报