日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問(wèn) 生活随笔!

生活随笔

當(dāng)前位置: 首頁(yè) > 编程语言 > c/c++ >内容正文

c/c++

C++中的逻辑操作符重载

發(fā)布時(shí)間:2025/4/5 c/c++ 12 豆豆
生活随笔 收集整理的這篇文章主要介紹了 C++中的逻辑操作符重载 小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

文章目錄

    • 1 C++中的邏輯操作符重載
      • 1.1 邏輯操作符的原生語(yǔ)義
      • 1.2 重載邏輯操作符
      • 1.3 邏輯操作符重載的建議

1 C++中的邏輯操作符重載

1.1 邏輯操作符的原生語(yǔ)義

邏輯操作符的原生語(yǔ)義如下:

  • 操作數(shù)只有兩種值(true和flase)。
  • 邏輯表達(dá)式不用完全計(jì)算就能確定最終值,短路原則。
  • 最終結(jié)果只能是true或者false。

我們先來(lái)看一下邏輯表達(dá)式的輸出結(jié)果:

#include <iostream> #include <string>using namespace std;int func(int i) {cout << "int func(int i) : i = " << i << endl;return i; }int main() {if( func(0) && func(1) ){cout << "Result is true!" << endl;}else{cout << "Result is false!" << endl;}cout << endl;if( func(0) || func(1) ){cout << "Result is true!" << endl;}else{cout << "Result is false!" << endl;}return 0; }

輸出結(jié)果如下:

1.2 重載邏輯操作符

我們看一下重載邏輯操作符后其語(yǔ)義會(huì)發(fā)生什么變化:

#include <iostream> #include <string>using namespace std;class Test {int mValue; public:Test(int v){mValue = v;}int value() const{return mValue;} };bool operator && (const Test& l, const Test& r) {return l.value() && r.value(); }bool operator || (const Test& l, const Test& r) {return l.value() || r.value(); }Test& func(Test& i) {cout << "Test func(Test i) : i.value() = " << i.value() << endl;return i; }int main() {Test t0(0);Test t1(1);if( func(t0) && func(t1) ){cout << "Result is true!" << endl;}else{cout << "Result is false!" << endl;}cout << endl;if( func(t0) || func(t1) ){cout << "Result is true!" << endl;}else{cout << "Result is false!" << endl;}return 0; }


從結(jié)果我們可以看出短路原則失效了!

問(wèn)題的本質(zhì)分析:

  • C++通過(guò)函數(shù)調(diào)用擴(kuò)展操作符的功能。
  • 進(jìn)入函數(shù)體前必須完成所有參數(shù)的計(jì)算。
  • 函數(shù)參數(shù)的計(jì)算次序是不定的。
  • 短路法則完全失效。
  • 雖然C++從語(yǔ)法上支持邏輯操作符重載,但是邏輯操作符重載后無(wú)法完全實(shí)現(xiàn)原生的語(yǔ)義,不滿足短路法則!

    1.3 邏輯操作符重載的建議

    如下建議從上往下依次遞進(jìn),不得已而為之:

    • 實(shí)際工程中避免重載邏輯操作符。
    • 通過(guò)重載比較操作符替代邏輯操作符重載(直接和true和false比較)。
    • 直接使用成員函數(shù)代替邏輯操作符重載。
    • 使用全局函數(shù)對(duì)邏輯操作符進(jìn)行重載。

    參考資料:

  • C++深度解析教程
  • 總結(jié)

    以上是生活随笔為你收集整理的C++中的逻辑操作符重载的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。

    如果覺(jué)得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。