邏輯操作符的陷阱

2022-08-30 13:51:14 字數 1168 閱讀 6777

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

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

最終結果只能是true或者false

那麼,如果我們過載邏輯運算子會發生什麼?

例:

1 #include 2 #include 

3using

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