C++ 构造函数初始化列表

      在如下的类定义中:

class C{
private:
	int x;       
	const int c;
public:
	C(){
		x = 0; //OK, x not const
		c = 0; //***** ERROR: c is const
	}        	
};
类C的构造函数通过赋值语句对该类的两个数据成员进行初始化。但由于数据成员c是const类型的,因此对其作出的赋值操作室非法的。只要为构造函数添加一个初始化列表就可以解决这个问题。
       以下语句

class C{
private:
	int x;       
	const int c;
public:
	C():c(0){ x = -1; }      	
};
列举了构造函数初始化列表的使用方法。

       构造函数的初始化段有一个冒号:开始,紧跟在冒号之后的是需要进行初始化的数据成员,然后是由一对小括号括起来的初始值。在本例中,我们将数字0用一对小括号括起来,将其作为数据成员c的初值。这也是初始化const类型数据成员的唯一方法。

       初始化列表仅在构造函数中有效,不能用于其他函数。构造函数的初始化列表可以初始化任何数据成员,但const类型数据成员不能用其他办法进行初始化。

class C{
private:
	int x;       
	const int c;
public:
	C():c(0),x(-1){} //empty body  	
};
       本例将const数据成员c和非const数据成员x都放在初始化段中。请注意数据成员的初始化顺序完全取决于它们在类当中声明的次序,与它们在初始化段当中出现的次序无关。本例中,由于数据成员x在c之前声明,因此尽管x在初始化段中比c后出现,但x的初始化仍然先于c。


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值