explicit的用法

explicit用法,防止对象隐式被转换。

例子一:隐式转换

 

class  C
{
public :  
    C ( int j );
    int i;
};
C
:: C (int j)
{
    i 
=  j;
}
int main()
{
    C c(
0 );
    c 
=   5 // 5被隐式转换

 

 

 

=   5   相当于


C temp(
5 ); //  实例化一个临时对象,
=  temp;  //  用 = 赋值
temp . C ::~ C();  //  temp 的析构函数被激活

 

 

如果类内的成员是一个指针,这种隐式转换是很危险的。为了防止这种隐式转换,我们把    C ( int j ); 改写为explicit     C ( int j );即可。

 

这下编译的时候,会不允许这种隐式的转换,出现如下提示:

 

 

Compiling dot.gif
test
. cpp
D
: \DATUM\DATUM\PROJECT\Test_muable\test . cpp( 14 :  error C2679 :  binary  ' = '   :  no operator  defined  which takes a right - hand operand of type  ' const int '  (or there is no acceptable conversion)
Error executing cl
. exe .  

Test_muable
. exe  -   1  error(s) ,   0  warning(s) 
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值