C 學習筆記 第38課 邏輯操作符的陷阱

2021-10-24 09:33:12 字數 1517 閱讀 6138

1.運算元只有兩種值(true和false)

2.邏輯表示式不用完全計算就能確定最終值

3.最終結果只能是true或者false

#include

using namespace std;

class test

intvalue()

const};

bool operator &&

(const test& l,

const test& r)

bool operator ||

(const test& l,

const test& r)

test fun

(test obj)

intmain()

else

cout << endl;if(

fun(t0)

||fun

(t1)

)else

return0;

}

結果:

從結果中我們可以看出,不管是使用&&還是||,函式fun都呼叫了兩次

c++通過函式呼叫擴充套件操作符的功能

進入函式體前必須完成所有引數的計算

函式引數的計算次序是不定的

短路法則完全失效

通過函式呼叫擴充套件操作符的功能

1.邏輯操作符過載後無法完全實現原生的語義

2.實際工程中應該避免過載邏輯操作符

3.通過過載比較操作符代替邏輯操作符過載

4.直接使用成員函式代替邏輯操作符過載

5.使用全域性函式對邏輯操作符進行過載

1.c++從語法上支援邏輯操作符過載

2.過載後的邏輯操作符不滿足短路規則

3.工程開發中不要過載邏輯操作符

4.通過比較操作符替換邏輯操作符過載

5.通過專用成員函式替換邏輯操作符過載

第38課 邏輯操作符的陷阱

1.1 運算元只有兩種值 true和false 1.2 邏輯表示式不用完全計算就能確定最終值 1.3 最終結果只能是true或false 邏輯表示式 又叫短路表示式 include using namespace std int func int i int main else cout endl ...

38 邏輯操作符的陷阱

邏輯操作符的原生語義 運算元只有兩種值 true和false 邏輯表示式不用完全計算就能確定最終值,最終結果只能是true或者false。邏輯操作符可以過載嗎?include include using namespace std int func int i int main else cout ...

C 38 邏輯操作符的陷阱

include include using namespace std int func int i int main else cout endl if func 1 func 0 else return 0 輸出 短路法則 int func int i 0 result is false int...