一、在下列情况下,必须使用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可能会还没初始化。