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...