深入探索C++对象模型->2.4成员们的初始化队伍

一、在下列情况下,必须使用member initialization list

  1、当初始化一个reference时;

  2、当初始化一个const member时;

  3、当调用一个base class的constructor,而它拥有一组参数时;

  4、当调用一个member class 的constructor,而它拥有一组参数时。

  在这四种情况下,初始化应该位于初始化列表,否则效率不高。

二、另一个常见问题是:能否调用一个member function以设定一个member的初值?

  答案是yes,下面是一段代码转换:

X::X(int val)
    : i(xfoo(val)), j(val)
{}
//实际上被转换如下
X::X(/*this pointer, */ int val)
{
    i = this->xfoo(val);
    j = val;
}

在此转换中,this指针已经被建构妥当。但是最好将function放于constructor体内,因为它所用到的members可能会还没初始化。

posted @ 2016-08-23 15:04  潇少爷  阅读(174)  评论(0编辑  收藏  举报