&&,|| 是一种逻辑运算符,它内置实现了短路原则,比如 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),没有实现短路规则。
总结:虽然语法上实现逻辑与和逻辑或运算符是不会存在问题的,但是由于函数调用的特点它无法实现短路规则,因此不建议重载。