Logical operators
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 ) ; |
| UND |
a and b
a && b |
Ja | bool T :: operator && ( const T2 & b ) const ; | bool operator && ( const T & a, const T2 & b ) ; |
| Inklusives ODER |
a or b
a || b |
Ja | bool T :: operator || ( const T2 & b ) const ; | bool operator || ( const T & a, const T2 & b ) ; |
|
||||
Inhaltsverzeichnis |
Erklärung
Die logischen Operatorausdrücke haben die Form
!
rhs
|
(1) | ||||||||
lhs
&&
rhs
|
(2) | ||||||||
lhs
||
rhs
|
(3) | ||||||||
Wenn der Operand kein
bool
ist, wird er mittels
kontextueller Konvertierung zu bool
in
bool
umgewandelt: Dies ist nur wohlgeformt, wenn die Deklaration
bool t(arg)
für ein temporäres, erfundenes
t
wohlgeformt ist.
Das Ergebnis ist ein bool Prvalue.
Für den eingebauten logischen NOT-Operator ist das Ergebnis true , wenn der Operand false ist. Andernfalls ist das Ergebnis false .
Für den eingebauten logischen UND-Operator ist das Ergebnis true , wenn beide Operanden true sind. Andernfalls ist das Ergebnis false . Dieser Operator arbeitet nach dem Kurzschlussprinzip : wenn der erste Operand false ist, wird der zweite Operand nicht ausgewertet.
Für den eingebauten logischen ODER-Operator ist das Ergebnis true , wenn entweder der erste oder der zweite Operand (oder beide) true ist. Dieser Operator ist kurzschließend: wenn der erste Operand true ist, wird der zweite Operand nicht ausgewertet.
Beachten Sie, dass bitweise logische Operatoren kein Short-Circuiting durchführen.
Ergebnisse
| a | true | false |
|---|---|---|
| ! a | false | true |
| and | a | ||
|---|---|---|---|
| true | false | ||
| b | true | true | false |
| false | false | false | |
| or | a | ||
|---|---|---|---|
| true | false | ||
| b | true | true | true |
| false | true | false | |
Bei Überlagerungsauflösung gegenüber benutzerdefinierten Operatoren nehmen die folgenden integrierten Funktionssignaturen an der Überlagerungsauflösung teil:
|
bool
operator
!
(
bool
)
|
||
|
bool
operator
&&
(
bool
,
bool
)
|
||
|
bool
operator
||
(
bool
,
bool
)
|
||
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... >
Standardbibliothek
Da die Kurzschluss-Eigenschaften von
operator&&
und
operator||
nicht für Überladungen gelten und da Typen mit boolescher Semantik unüblich sind, überladen nur zwei Standardbibliotheksklassen diese Operatoren:
|
Wendet einen unären arithmetischen Operator auf jedes Element des valarray an
(öffentliche Mitgliedsfunktion von
std::valarray<T>
)
|
|
|
Wendet binäre Operatoren auf jedes Element von zwei valarrays oder einem valarray und einem Wert an
(Funktionstemplate) |
|
|
Überprüft, ob ein Fehler aufgetreten ist (Synonym für
fail()
)
(öffentliche Mitgliedsfunktion von
std::basic_ios<CharT,Traits>
)
|
Siehe auch
|
Funktionsobjekt, das
x
&&
y
implementiert
(Klassentemplate) |
|
|
Funktionsobjekt, das
x
||
y
implementiert
(Klassentemplate) |
|
|
Funktionsobjekt, das
!
x
implementiert
(Klassentemplate) |
| Häufige Operatoren | ||||||
|---|---|---|---|---|---|---|
| Zuweisung |
Inkrement
Dekrement |
Arithmetik | Logisch | Vergleich |
Member
Zugriff |
Sonstige |
|
a
=
b
|
++
a
|
+
a
|
!
a
|
a
==
b
|
a
[
...
]
|
Funktionsaufruf
a ( ... ) |
|
Komma
a, b |
||||||
|
Bedingungsoperator
a ? b : c |
||||||
| Spezielle Operatoren | ||||||
|
static_cast
konvertiert einen Typ in einen anderen verwandten Typ
|
||||||
|
C-Dokumentation
für
Logische Operatoren
|