【C++ Operators】不要重载&&(逻辑与)、||(逻辑或)和,(逗号)操作符

运算符重载

运算符重载是一种在C++中非常强大的功能,它允许开发者为现有的运算符赋予新的含义

基本原则

  1. 尽可能保持该运算符的常用直观含义;
  2. 尽可能保持运算符的原始行为。

然而,当重载&&(逻辑与)、||(逻辑或)和,(逗号)这三个运算符时,遵守这两个原则变得非常困难。

1. 重载&&(逻辑与)、||(逻辑或)时:

当我们重载这两个运算符时,我们无法保持C++对于“真假值表达式”采用的骤死式评估方式。

骤死式评估方式
即:当逻辑表达式的结果已经可以确定时,剩余的部分就不再计算了。
例如,在逻辑与(&&)运算中,如果左操作数为假,那么无论右操作数是真是假,整个表达式的结果都是假,因此我们不再计算右操作数。同样,在逻辑或(||)运算中,如果左操作数为真,那么无论右操作数是真是假,整个表达式的结果都是真,因此我们也不再计算右操作数。

  • 在C++中,重载的运算符是通过函数来实现的,函数参数在函数调用前需被计算出来;
  • 无论(逻辑表达式)是否满足“骤死式评估方式”,重载的&&和||运算符都会进行它们前后的两个操作数的计算操作,违反了第二个原则。

2. 重载,(逗号运算符)时:

当我们重载逗号运算符时,我们无法保证这个序列点的特性。

逗号运算符是一个顺序点,帮助避免一些关于顺序的未定义行为。

顺序点
确保左边的所有操作都在它右边的操作之前完成。

  • 在C++中,函数参数在函数调用前都需要被计算出来,而参数的计算顺序是不确定的;
  • 重载(逗号运算符)将无法确定表达式的计算顺序,违反了原则。

参考:在C++中为何我们不应重载&&、||和,操作符

总结

就算是可重载的操作符,也不可毫无理由地将其重载,C++运算符重载是是一种强大的工具,但我们很难有需求用到这一功能,很难超越原有行为特性且很难避免无误,总而言之,尽量避免重载它们。

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值