存档

文章标签 ‘构造函数’

C++Primer学习笔记2_构造函数初始化式

2009年12月25日 mousefire 没有评论

  正如Lippman所说,构造函数初始化列表是许多相当有经验的C++程序员都没有掌握的一个特性。虽然在学习MFC的时候,经常看到这种形式的初始化,但是总觉得格式不漂亮,也没有深究为什么Microsoft的程序员们喜欢这样做,直到今天。且看下面这两段代码:

  1. Sales_item(const std::string &book=""):isbn(book),units_sold(0),revenue(0.0){}
  2. Sales_item(const std::string &book="")
  3. {
  4.     isbn=book;
  5.     units_sold=0;
  6.     revenue=0.0;
  7. }

  第一段代码使用了初始化式,执行构造函数时,直接执行初始化,而第二段代码中,虽然没有显式的初始化式,但是在执行构造函数之前,要初始化isbn成员,由默认的string构造函数执行,在执行构造函数的函数体时,isbn成员已经有值了。这两个构造函数虽然执行结果相同,但是不使用初始化式等于在程序执行时多了一步。这种效率上的损失还不是最糟糕的,在以下情况下,甚至必须要使用初始化列表进行初始化:

1.成员是没有默认构造函数的类

2.成员是const对象

3.成员是引用类型的对象

  要注意的另外一点是:成员初始化的次序并不是它们出现在初始化列表中的次序,而是定义成员的次序.