您好,登錄后才能下訂單哦!
本篇內容主要講解“C++邏輯操作符怎么使用”,感興趣的朋友不妨來看看。本文介紹的方法操作簡單快捷,實用性強。下面就讓小編來帶大家學習“C++邏輯操作符怎么使用”吧!
操作數只有兩種值( true和 false )邏
輯表達式不用完全計算就能確定最終值
最終結果只能是 true 或者 false
下面看一個邏輯表達式的代碼:
#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; }
輸出結果如下:
這就是邏輯操作符的短路規則,可以參照我之前寫的詳細講解邏輯運算符的使用
邏輯操作符可以重載嗎?重載邏輯操作符有什么意義?
下面看一個重載邏輯操作符示例:
#include <iostream> 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; } }
輸出結果如下:
按照短路法則,func(t0) && func(t1) 應該只執行 func(t0),這里卻輸出了func(t0) 和 func(t1) 運行后的值,這是為什么呢?且看下面解析。
問題的本質分析
C++ 通過函數調用擴展操作符的功能
進入函數體前必須完成所有參數的計算
函數參數的計算次序是不定的
短路法則完全失效
邏輯操作符重載后無法完全實現原生的語義。
上述代碼等效寫法如下:
#include <iostream> 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 (operator && (func(t0), func(t1))) { cout << "Result is true!" << endl; } else { cout << "Result is false!" << endl; } cout << endl; if (operator || (func(t0), func(t1))) { cout << "Result is true!" << endl; } else { cout << "Result is false!" << endl; } }
輸出結果和上面一樣:
將func(t0) && func(t1) 改寫成operator && (func(t0), func(t1)),就不難理解為什么了。核心就兩點:
1.進入函數體前必須完成所有參數的計算
2.函數參數的計算次序是不定的
一些有用的建議
實際工程開發中避免重載邏輯操作符
通過重載比較操作符代替邏輯操作符重載
直接使用成員函數代替邏輯操作符重載
使用全局函數對邏輯操作符進行重載
到此,相信大家對“C++邏輯操作符怎么使用”有了更深的了解,不妨來實際操作一番吧!這里是億速云網站,更多相關內容可以進入相關頻道進行查詢,關注我們,繼續學習!
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。