在进行本文正文之前,先解释一下逻辑&&和逻辑||运算符中的短路规则, 比如 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;
}
/**
输出结果为:
注意:&&操作符的结合顺序是从左向右,不论&&右边是否是括号,从左到右严格执行
执行+号重载函数
执行&&重载函数
*/
总结: 逻辑&&和逻辑||运算符是可以重载的,但是重载不能实现逻辑&&和逻辑||运算符的短路功能