构造函数初始化问题

§对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     public3         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 };
原文地址:https://www.cnblogs.com/dormant/p/4977028.html