千万不要重载&& || ,这三个操作符

“骤死式”评估方式:一旦表达式的真假值确定,即使表达式中还有部分尚未检验,整个评估工作仍告结束。

C++允许我们重载operator&&和operator|| 两函数进行重载。
下面这个式子:
if( expression1 && expression2 )
会被编译器视为以下两者之一
1、if( expression1.operator&&( expression2 )   //假设operator&&是个member function
2、if( operator&&( expression1, expression2 )//假设operator&&是个全局函数

然后函数调用和“骤死式”语义有两个重大区别:(1)当函数调用动作被执行,所有参数值都必须评估完成,所以,当我们调用operator&&和
operator||时,两个参数都已评估完成。没有什么“骤死式”语义。(2)C++语言规范并未明确定义函数调用动作中各个参数的评估顺序,所以
没办法知道expression1和expression2哪个会被先评估。如此,则没有办法提供程序员预期的某种行为模式。

不能重载的操作符有:
.          .*         ::         ?:
new   delete   sizeof     typeid
static_cast    dynamic_cast    const_cast    reinterpret_cast


More Effectiive C++ ----7th

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值