首先,我们来说一下为什么不要重载&&与||
&&与|| 具有骤死式语意。即(在第一个条件为真时 || 即为真,不会判断第二个条件)
假设你重载了&& 则当你调用的时候会出现这种情况
if(a1 && a2)//a1、a2是重载了&& 的类对象
则会变成这样
if(a1.operator &&(a2));//operator &&是成员函数
if(operator && (a1,a2));//operator &&是全局函数。
这已经变成了函数调用。
函数调用与骤死式有两点不同:
1.当函数调用动作完成,所有的参数必须全部评估完毕。即第一个条件是假,也得判断第二个条件。
2.c++没有明确规定函数参数的评估顺序。
这就会导致,你无法决定&&的左右两边谁会先判定。显然,这并不是我们需要的&&。
||与&&是一样的。
“,”操作符
,操作符是经常用的操作符.如:
for(int i=0,j=10;i<10;i++,j--);
{
...
}
如果重载了,会与上面情况一样,会变成调用函数,i++,j--也就变成了函数参数,你无法决定让哪一个参数先被评估。
所以,不要重载&& ||与,操作符。因为,你很难实现它本身的行为。