构造函数的初始化列表

 1 /**
 2   *有些成员必须在构造函数初始化列表中进行初始化。对于这样的成员,在构造函数体重对它们赋值不起作用。
 3   *没有默认构造函数的类类型的成员,以及const或引用类型的成员,不管是哪种类型,都必须在构造函数初始化
 4   *列表中进行初始化
 5   */
 6 class ConstRef
 7 {
 8     public:
 9         ConstRef(int ii);
10     private:
11         int i;
12         const int ci;
13         int &ri;
14 };
15 
16 //错误做法
17 ConstRef::ConstRef(int ii)
18 {
19     i = ii;     //OK
20     ci = ii;   //error:cannot assign to a const
21     ri = i;    // assigns to ri which was not bound to an object
22 }
23 //正确做法
24 ConstRef::ConstRef(int ii): i(ii), ci(i), ri(ii)
25 {
26 
27 }
 1 /**
 2   * 注意:
 3   *      1、每个成员在构造函数初始化列表中只能指定一次
 4   *      2、构造函数的初始化列表仅指定用于初始化成员的值,并不指定这些初始化执行的次序。
 5   *         成员被初始化的次序就是定义成员的次序。第一个成员首先被初始化,然后是第二个,以次类推
 6   */
 7   
 8 //下边的代码并不能达到预期效果
 9 class X
10 {
11     int i;
12     int j;
13 public:
14     // run-time error: i is initialized before j
15     X(int val):j(val), i(j){}         // i 先被初始化,之后才是 j
16 };
原文地址:https://www.cnblogs.com/dongsheng/p/3325862.html