邏輯與和邏輯或的過載

2021-08-08 15:38:14 字數 773 閱讀 4466

&&和||是c++中非常特殊的操作符 ,&&和||內建實現了短路規則 ,操作符過載是靠函式過載來完成的 ,運算元作為函式引數傳遞 ,c++的函式引數都會被求值,無法實現短路規則 。所以一般情況下不會過載邏輯與和邏輯或。

下面就用乙個案例來分析為什麼不要過載邏輯或和邏輯與。

#include 

class test8

bool

operator&&(test8 &obj)

private:

int m_a;

};int main()

過載的函式可以進行邏輯與的操作,對結果沒有什麼影響,但是我們卻無法模擬出邏輯與真正執行的過程,上面程式中,如果不是使用過載的&&,而是單純進行數字計算,即定義整形資料a = 10,b = 0, c = 30;然後進行b&&(a = c)的操作,此時的結果是b = 0, a = 10, c = 30;很明顯後面的賦值操作a = c 是沒有執行的,這就是內建邏輯與的短路原則,當&&前的是為0時,就結束了不再執行後面的操作了;

而如果使用過載的函式,對物件進行&&操作,此時的結果就是a = 30, b = 0, c = 30,可以發現後面的賦值操作是執行了的,為什麼呢?

我們知道,&&的過載是通過函式過載來完成的,運算元作為函式引數傳遞,那麼上面的b&&(a = c)操作就可以改寫為b.operator&&(a = c)

很顯然這個過程不會有短路原則。所以過載的&& 操作符並不是真正意義上的&&操作,同樣的||操作符也是這樣的,所一般情況下不要過載&&和||操作符。

js中的邏輯與( )和邏輯或( )

結果為true時 取最後一項的值 結果為false時 去第乙個為false的值 結果為true時 取 第乙個為true的值 結果為false時 取最後一項的值 var aa 1 2 3 4 4 整個表示式為true 返回 最後一項 var bb 1 2 null undefined 4 null 整...

js中的邏輯與( )和邏輯或( )

發布者 博主 在2014年9月13日 在js中寫出如下的答案 var a 2 var b 3 var andflag a b var orflag a b 問andflag 和orflag 分別是什麼?起初我認為 andflag 和orflag 的值都為 true 畢竟 和 都是求boolean 後...

邏輯與和邏輯或的短路運算

短路運算 var a 1 var b 2 console.log a b 列印1 var a var b 2 console.log a b 列印2 var a 1 var b console.log a b 列印1 如果左邊為真 就先輸出左邊的值 如果左邊為假 就先輸出右邊的值 短路運算 var ...