为什么不要重载&&,||操作符

本文探讨了在C++中重载逻辑与(&&)和逻辑或(||)运算符的问题,通过实例说明了重载这些运算符可能违背短路原则,导致预期外的行为。文章强调了尽管语法上可行,但因函数调用特性,重载逻辑运算符无法正确实现短路逻辑,故不推荐此做法。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

&&,|| 是一种逻辑运算符,它内置实现了短路原则,比如 condition1 && condition2,如果 condition1 不满足,那么 condition2 的值将不会得到计算,同理如果 condition1 || condition2,当 condition1 为真时,condition2 的值也不会得到计算。

为什么不要重载逻辑与,逻辑或运算符?举个例子如下:假设有一个类 class Test 已经重载了 && 操作符和 + 操作符

Test t1 = 0;

Test t2 = 1;

if(t1 && (t1 + t2))

{

    cout << "ok" << endl;

}

本来 t1 为0,t1 + t2 不会得到运算,但是如果根据函数调用的方式:

t1.operator&&(t1.operator+(t2))

会先运算 t1.operator+(t2),没有实现短路规则。

总结:虽然语法上实现逻辑与和逻辑或运算符是不会存在问题的,但是由于函数调用的特点它无法实现短路规则,因此不建议重载。

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

椛茶

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值