C 中邏輯操作符的過載分析

2022-08-18 10:27:07 字數 2141 閱讀 9750

1,邏輯運算子的原生語義:

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

1,c 語言中只有非 0 和 0;

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

1,短路規則;

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

2,邏輯表示式程式設計實驗:

1,main.cpp 檔案:

1 #include 2 #include 34

using

namespace

std;56

int func(inti)7

1213

intmain()

1419

else

2023

24 cout <2526

if( func(0) || func(1) ) //

func(0) 和 func(1) 都被呼叫;

2730

else

3134

35return0;

36 }

3,邏輯操作符可以過載嗎?過載邏輯操作符有什麼意義?

1,可以過載;

4,過載邏輯操作符程式設計實驗:

1,main.cpp 檔案:

1 #include 2 #include 34

using

namespace

std;56

class

test714

int value() const

1518

};19

20/*

邏輯操作符必須返回 bool 型別

*/21

bool

operator && (const test& l, const test&r)

2225

26bool

operator || (const test& l, const test&r)

2730

31test func(test i)

3237

38int

main()

3947

else

4851

52 cout <5354

if( func(1) || func(0) ) //

==> operator || (func(0), func(1))

5558

else

5962

63return0;

64 }

2,輸出結果:

1 test func(test i) : i.value() = 1

2 test func(test i) : i.value() = 0

3 result is

false!

45 test func(test i) : i.value() = 0

6 test func(test i) : i.value() = 1

7 result is

true!

3,過載的邏輯操作符都是從左向右呼叫運算元,短路規則不再適用;

5,過載邏輯操作符:

1,問題的分析:

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

1,呼叫過載函式需要將兩個運算元傳遞給函式進行呼叫,這就是問題的本質;

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

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

4,短路法則完全失效;

2,邏輯操作符過載後無法完全實現原生的語義;

1,無法通過函式呼叫滿足短路規則;

3,一些有用的建議:

1,實際工程開發中避免過載邏輯操作符;

2,通過過載比較操作符代替邏輯操作符過載;

1,將乙個物件與 true 或 false 比較,來過載;

3,直接使用成員函式代替邏輯操作符過載;

4,使用全域性函式對邏輯操作符進行過載;

1,當必須實現邏輯操作符的過載時,用全域性函式實現;

6,小結:

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

2,過載後的邏輯操作符不滿足短路法則;

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

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

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

C 中的邏輯操作符過載

邏輯操作符的原生語義如下 我們先來看一下邏輯表示式的輸出結果 include include using namespace std intfunc int i intmain else cout endl if func 0 func 1 else return0 我們看一下過載邏輯操作符後其語義...

C 中逗號操作符過載的分析

1,關注逗號操作符過載後帶來的變化 2,逗號操作符 1,逗號操作符 可以構成都好表示式 exp1,exp2,exp3,expn 1,逗號表示式用於將多個表示式連線為乙個表示式 1,就是用來起連線不同語句作用的 2,逗號表示式的值為最後乙個子表示式的值 1,最後乙個必須有值 3,逗號表示式中的前 n ...

c 中 操作符過載

操作符過載 1.有先後順序,如 t3 t1 t2 則t1 t2等價於t1.operate t2 2.對 操作符進行過載時,如aa是有本質區別的。操作符過載就是用函式的方法對乙個操作符進行重新定義,在該函式中定義了操作符所要完成的功能。其中cout是輸出流ostream中的物件 元素 3.a cout...