为什么不要重载逻辑&&和逻辑||运算符

     在进行本文正文之前,先解释一下逻辑&&和逻辑||运算符中的短路规则, 比如 0 && 1这一运算符,从左到右,左边是0,就没有必要执行右边的1了,会忽略掉,这就是短路规则。

    先上代码,具体看注释,代码如下:

     

#include <cstdlib>
#include <iostream>
using namespace std;

class Test
{
	int i;
public:
	Test(int i)
	{
		this->i = i;
	}

	Test operator+ (const Test& obj)
	{
		Test ret(0);
		cout << "执行+号重载函数" << endl;
		ret.i = i + obj.i;
		return ret;
	}

	bool operator&& (const Test& obj)
	{
		cout << "执行&&重载函数" << endl;
		return i && obj.i;
	}
};

// && 从左向右
void main()
{
	int a1 = 0;
	int a2 = 1;

	cout << "注意:&&操作符的结合顺序是从左向右,不论&&右边是否是括号,从左到右严格执行" << endl;

	if (a1 && (a1 + a2))
	{
		cout << "有一个是假,则不在执行下一个表达式的计算" << endl;
	}

	Test t1 = 0;
	Test t2 = 1;

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

	//1 && || 重载他们 不会产生短路效果,这里是重载了逻辑&&运算符
	if (t1 && (t1 + t2))
	{
		//相当于t1.operator&&(t1.operator+(t2));, 在这里会先计算t1.operator+(t2)
		cout << "两个函数都被执行了,而且是先执行了+" << endl;
	}

	system("pause");
	return;
}
/**
输出结果为:
注意:&&操作符的结合顺序是从左向右,不论&&右边是否是括号,从左到右严格执行
执行+号重载函数
执行&&重载函数
*/

 

总结: 逻辑&&和逻辑||运算符是可以重载的,但是重载不能实现逻辑&&和逻辑||运算符的短路功能

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值