1.1、
運算元只有兩種值(true和false)
1.2、
邏輯表示式不用完全計算就能確定最終值
1.3、
最終結果只能是true或false
/*************** 邏輯表示式(又叫短路表示式) *************/
#include
using namespace std;
int func(int i)
int main()
else
cout << endl;
//||的短路:只要乙個為1,就短路
if(func(0) || func(1))
else
return 0; }
2.1、
過載出現的問題及分析
(過載任意操作符都不能改變他的原生語義)
2.1.1、c++通過
函式呼叫擴充套件操作符的功能
2.1.2、進入函式體前
必須完成所有引數的計算
2.1.3、函式引數的計算次序是
不定的
2.1.4、短路法則完全失效
2.2、邏輯操作符過載後
無法完全實現原生的意義
2.3、一些有用的建議
2.3.1、實際工程開發中
避免過載邏輯操作符
2.3.2、通過過載
比較操作符代替邏輯操作符過載
2.3.3、直接使用
成員函式代替邏輯操作符過載
2.3.4、使用
全域性函式對邏輯操作符進行過載
為什麼不要 過載邏輯與和邏輯或&& || 操作符(
/*************** 操作邏輯運算子 *************/
#include
using namespace std;
class test
int value() const //const修飾的函式,const物件才能呼叫,呼叫const成員,變數
};//利用全域性函式過載&&操作符
bool operator && (const test& lp, const test& rp)
//利用全域性函式過載||操作符
bool operator || (const test& lp, const test& rp)
//經過測試::普通物件也能呼叫const物件。
test func(test i)//這個函式的作用就是列印一下物件的值,返回的還是類的物件
int main()
else
cout << endl;
//相當於函式呼叫,進入函式體,引數的值必須被計算出來,兩個引數計算出來,才能進入operator函式體。
//短路法則完全失效,過載改變了||原來短路的語義。
if(func(t1) || func(t0))//operator ||(func(t0), func(t1))
else
return 0; }
3.1、
c++從語法上支援邏輯操作符過載
3.2、
過載後的邏輯操作符
不滿足短路法則
3.3、
工程開發中
不要過載邏輯操作符
3.4、
通過過載
比較操作符替換邏輯操作符過載 ???
3.5、
通過專用
成員函式替換邏輯操作符的過載
C 學習筆記 第38課 邏輯操作符的陷阱
1.運算元只有兩種值 true和false 2.邏輯表示式不用完全計算就能確定最終值 3.最終結果只能是true或者false include using namespace std class test intvalue const bool operator const test l,const...
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...