邏輯運算子
返回布林運算的結果。
運算子名稱 | 語法 | 可過載 | 原型示例(對於 class T) | |
---|---|---|---|---|
類定義內部 | 類定義外部 | |||
否定 | not a
!a |
是 | bool T::operator!() const; | bool operator!(const T &a); |
AND | a and b
a && b |
是 | bool T::operator&&(const T2 &b) const; | bool operator&&(const T &a, const T2 &b); |
包含 OR | a or b
a || b |
是 | bool T::operator||(const T2 &b) const; | bool operator||(const T &a, const T2 &b); |
|
目錄 |
[編輯] 解釋
邏輯運算子表示式具有以下形式
! rhs |
(1) | ||||||||
lhs && rhs |
(2) | ||||||||
lhs || rhs |
(3) | ||||||||
如果運算元不是 bool,它會使用上下文轉換為 bool 轉換為 bool:如果宣告 bool t(arg)
對於某個虛構的臨時變數 t
是格式良好的,則轉換是格式良好的。
結果是一個 bool prvalue。
對於內建的邏輯非運算子,如果運算元為 false,則結果為 true。否則,結果為 false。
對於內建的邏輯與運算子,如果兩個運算元都為 true,則結果為 true。否則,結果為 false。此運算子是短路的:如果第一個運算元為 false,則不求值第二個運算元。
對於內建的邏輯或運算子,如果第一個或第二個運算元(或兩者)為 true,則結果為 true。此運算子是短路的:如果第一個運算元為 true,則不求值第二個運算元。
請注意,按位邏輯運算子不執行短路求值。
[編輯] 結果
a | true | false |
---|---|---|
!a | false | true |
和 | a | ||
---|---|---|---|
true | false | ||
b | true | true | false |
false | false | false |
或 | a | ||
---|---|---|---|
true | false | ||
b | true | true | true |
false | true | false |
在使用者定義運算子的過載決議中,以下內建函式簽名參與過載決議
bool operator!(bool) |
||
bool operator&&(bool, bool) |
||
bool operator||(bool, bool) |
||
[編輯] 示例
#include <iostream> #include <sstream> #include <string> int main() { int n = 2; int* p = &n; // pointers are convertible to bool if ( p && *p == 2 // "*p" is safe to use after "p &&" || !p && n != 2) // || has lower precedence than && std::cout << "true\n"; // streams are also convertible to bool std::stringstream cin; cin << "3...\n" << "2...\n" << "1...\n" << "quit"; std::cout << "Enter 'quit' to quit.\n"; for (std::string line; std::cout << "> " && std::getline(cin, line) && line != "quit";) std::cout << line << '\n'; }
輸出
true Enter 'quit' to quit. > 3... > 2... > 1... >
[編輯] 標準庫
因為 operator&&
和 operator||
的短路特性不適用於過載,並且因為具有布林語義的型別不常見,所以只有兩個標準庫類過載了這些運算子
對 valarray 的每個元素應用一元算術運算子 ( std::valarray<T> 的公共成員函式)
| |
對兩個 valarray 的每個元素,或一個 valarray 和一個值應用二元運算子 (函式模板) | |
檢查是否發生錯誤(fail() 的同義詞) ( std::basic_ios<CharT,Traits> 的公共成員函式) |
[編輯] 另請參閱
實現 x && y 的函式物件 (類模板) | |
實現 x || y 的函式物件 (類模板) | |
實現 !x 的函式物件 (類模板) |
常見運算子 | ||||||
---|---|---|---|---|---|---|
賦值 | 遞增 遞減 |
算術 | 邏輯 | 比較 | 成員 訪問 |
其他 |
a = b |
++a |
+a |
!a |
a == b |
a[...] |
函式呼叫 a(...) |
逗號 a, b | ||||||
條件運算子 a ? b : c | ||||||
特殊運算子 | ||||||
static_cast 將一種型別轉換為另一種相關型別 |
C 文件 關於 邏輯運算子
|