運算元只有兩種值(true和false)
邏輯表示式不用完全計算就能確定最終值
最終結果只能是true或者false
那麼,如果我們過載邏輯運算子會發生什麼?
例:
1 #include 2 #include3using
namespace
std;
4class
test
512 ~test()
1315
intget_value()
1619
};20
//過載邏輯與操作符
21bool
operator &&(test op1,test op2)
2225
//過載邏輯或操作符
26bool
operator ||(test op1,test op2)
2730
test func(test t)
3136
intmain()
3745
else
4649
#endif
50if (operator &&(func(t0),func(t1)))
5154
else
5558 }
執行結果:
test func(test t) : test.value = 1
test func(test t) : test.value = 0
the result is false
c++通過函式呼叫擴充套件操作符的功能
進入函式前必須完成所有引數的計算
函式引數的計算次序是不定的
短路法則完全失效
如果過載邏輯操作符,邏輯操作符過載後無法完全實現原生的語義!!
在實際工程中避免過載邏輯操作符
通過過載比較操作符代替邏輯操作符
直接使用成員函式代替邏輯操作符過載
使用全域性函式對邏輯操作符進行過載
c++從語義上支援邏輯操作符過載
過載後的邏輯操作符不滿足短路法則
工程開發中不要過載邏輯操作符
通過過載比較操作符替換邏輯操作符過載
通過專用成員函式替換邏輯操作符過載
38 邏輯操作符的陷阱
邏輯操作符的原生語義 運算元只有兩種值 true和false 邏輯表示式不用完全計算就能確定最終值,最終結果只能是true或者false。邏輯操作符可以過載嗎?include include using namespace std int func int i int main else cout ...
第38課 邏輯操作符的陷阱
1.1 運算元只有兩種值 true和false 1.2 邏輯表示式不用完全計算就能確定最終值 1.3 最終結果只能是true或false 邏輯表示式 又叫短路表示式 include using namespace std int func int i int main else cout endl ...
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...