不要重载&& ||和,操作符

首先,我们来说一下为什么不要重载&&与||

&&与|| 具有骤死式语意。即(在第一个条件为真时 || 即为真,不会判断第二个条件)

假设你重载了&& 则当你调用的时候会出现这种情况

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--也就变成了函数参数,你无法决定让哪一个参数先被评估。

所以,不要重载&& ||与,操作符。因为,你很难实现它本身的行为。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章