构造函数初始化问题

§对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

评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符  | 博主筛选后可见
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值