Logische Operatoren
Gibt das Ergebnis einer booleschen Operation zurück.
| Operatorname | Syntax | Überladbar | Prototyp-Beispiele (für class T) | |
|---|---|---|---|---|
| Innerhalb der Klassendefinition | Außerhalb der Klassendefinition | |||
| negation | not a
!a |
Ja | bool T::operator!() const; | bool operator!(const T &a); |
| AND | a and b
a && b |
Ja | bool T::operator&&(const T2 &b) const; | bool operator&&(const T &a, const T2 &b); |
| inklusive OR | a or b
a || b |
Ja | bool T::operator||(const T2 &b) const; | bool operator||(const T &a, const T2 &b); |
| ||||
Inhalt |
[bearbeiten] Erklärung
Die logischen Operator-Ausdrücke haben die Form
! rhs |
(1) | ||||||||
lhs && rhs |
(2) | ||||||||
lhs || rhs |
(3) | ||||||||
Wenn der Operand kein bool ist, wird er in bool umgewandelt, indem kontextbezogene Umwandlung in bool verwendet wird: Dies ist nur gutartig, wenn die Deklaration bool t(arg) für ein erfundenes temporäres t gutartig ist.
Das Ergebnis ist ein bool Prvalue.
Für den integrierten logischen NICHT-Operator ist das Ergebnis true, wenn der Operand false ist. Andernfalls ist das Ergebnis false.
Für den integrierten logischen UND-Operator ist das Ergebnis true, wenn beide Operanden true sind. Andernfalls ist das Ergebnis false. Dieser Operator ist short-circuiting: Wenn der erste Operand false ist, wird der zweite Operand nicht ausgewertet.
Für den integrierten logischen ODER-Operator ist das Ergebnis true, wenn entweder der erste oder der zweite Operand (oder beide) true ist. Dieser Operator ist short-circuiting: Wenn der erste Operand true ist, wird der zweite Operand nicht ausgewertet.
Beachten Sie, dass bitwise logische Operatoren keine Short-Circuit-Auswertung durchführen.
[bearbeiten] Ergebnisse
| a | true | false |
|---|---|---|
| !a | false | true |
| und | a | ||
|---|---|---|---|
| true | false | ||
| b | true | true | false |
| false | false | false | |
| or | a | ||
|---|---|---|---|
| true | false | ||
| b | true | true | true |
| false | true | false | |
Bei der Auflösung von Aufrufen für überladene Operatoren nehmen die folgenden integrierten Funktionssignaturen an der Überladungsauflösung teil
| bool operator!(bool) |
||
| bool operator&&(bool, bool) |
||
| bool operator||(bool, bool) |
||
[bearbeiten] Beispiel
#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'; }
Ausgabe
true Enter 'quit' to quit. > 3... > 2... > 1... >
[bearbeiten] Standardbibliothek
Da die Short-Circuit-Eigenschaften von operator&& und operator|| für Überladungen nicht gelten und boolesche Semantik besitzende Typen selten sind, überladen nur zwei Standardbibliotheksklassen diese Operatoren
| wendet einen unären arithmetischen Operator auf jedes Element des Valarrays an (öffentliche Memberfunktion von std::valarray<T>)
| |
| wendet binäre Operatoren auf jedes Element zweier Valarrays oder eines Valarrays und eines Werts an (function template) | |
| prüft, ob ein Fehler aufgetreten ist (Synonym für fail()) (public member function of std::basic_ios<CharT,Traits>) |
[bearbeiten] Siehe auch
| Funktions-Objekt, das x && y implementiert (Klassen-Template) | |
| Funktions-Objekt, das x || y implementiert (Klassen-Template) | |
| Funktions-Objekt, das !x implementiert (Klassen-Template) |
| Häufige Operatoren | ||||||
|---|---|---|---|---|---|---|
| Zuweisung | Inkrement Dekrement |
Arithmetik | Logisch | Vergleich | Member Zugriff |
Sonstiges |
|
a = b |
++a |
+a |
!a |
a == b |
a[...] |
Funktionsaufruf a(...) |
| Komma a, b | ||||||
| Ternär a ? b : c | ||||||
| Spezielle Operatoren | ||||||
|
static_cast konvertiert einen Typ in einen anderen verwandten Typ | ||||||
| C-Dokumentation für Logische Operatoren
|