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 };