首先,我們來說一下爲什麼不要重載&&與||
&&與|| 具有驟死式語意。即(在第一個條件爲真時 || 即爲真,不會判斷第二個條件)
假設你重載了&& 則當你調用的時候會出現這種情況
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--也就變成了函數參數,你無法決定讓哪一個參數先被評估。
所以,不要重載&& ||與,操作符。因爲,你很難實現它本身的行爲。