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

首先,我們來說一下爲什麼不要重載&&與||

&&與|| 具有驟死式語意。即(在第一個條件爲真時 || 即爲真,不會判斷第二個條件)

假設你重載了&& 則當你調用的時候會出現這種情況

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--也就變成了函數參數,你無法決定讓哪一個參數先被評估。

所以,不要重載&& ||與,操作符。因爲,你很難實現它本身的行爲。

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