构造函数初始化问题
§对const类型的数据成员进行初始化时不能直接赋值,如下面的赋值操作是错误的。
1 class C { 2 public: 3 C() { 4 x = 0; //OK,x not const 5 c = 0; //ERROR,c is const 6 } 7 8 private: 9 int x; //nonconst data member 10 const int c; // const data member 11 };
因此,在C++中对const类型的数据成员进行初始化时必须为构造函数添加一个初始化列表,如下:
1 class C{ 2 public: 3 C () :c(0) {x = -1} 4 5 private: 6 int x; 7 const int c; //const data member 8 };
再次总结:(规则)
(1)构造函数的初始化段由一个冒号:开始,紧跟在冒号之后的是需要进行初始化的数据成员,然后是由一对小括号括起来的初始值。
(2)初始化列表仅在构造函数中有效,不能用于其他函数。
(3)构造函数的初始化列表可以初始化任何数据成员(const 和 非const),但const类型的数据成员只能在初始化列表里初始化,而不能用其他方法进行初始化。
1 class C { 2 public: 3 C() : c(0), x(-1){} //empty body 4 5 private: 6 int x; 7 const int c; //const data member 8 };