and, && (C++)
Nach oben zu Schlüsselwörter alphabetisch - Index
Kategorie
Alternative Repräsentationen von Token, Operatoren
Syntax
Beschreibung
Der Operator and ist eine alternative Repräsentation des Operators && (binäres oder logisches UND).
Wenn beide Operanden den Wert true haben, ist das Ergebnis auch true. Ansonsten ist das Ergebnis false. Beide Operanden werden implizit in bool konvertiert und der Ergebnistyp ist bool.
Im Gegensatz zu dem Operator & (bitweises UND) gewährleistet der Operator && eine Auswertung der Operanden von links nach rechts. Wenn der linke Operand 0 (oder false) ergibt, wird der rechte Operand nicht ausgewertet.
Die Operatoren and und && benutzen eine Kurzauswertung (den zweiten Operanden nicht auswerten, wenn der erste false ergeben hat). Daher ist es gültig und sicher, auf Null-Zeiger, wie im folgenden Beispiel, zu testen:
Für die Verwendung des Operators and müssen Sie die Option Neue Operatorennamen aktivieren aktivieren (die Compiler-Option -VM, auf der Seite Kompatibilität des Dialogfeldes Projekt > Optionen).
Beispiel für and
bool test( int * p ) {
return (p != 0) and (*p > 5);
}
Das Ersetzen von and durch && ist auch zulässig.
Überladen von && und and
Sie können den Operator && und auch seine alternative Repräsentation and überladen. Bedenken Sie dabei, dass bei überladenem Operator die Kurzauswertung nicht mehr zum Tragen kommt und der Test auf leere Zeiger nicht mehr sicher ist. Hier ist ein Beispiel für das Überladen von and:
struct example { bool operator and ( const example & ) {return true;}// same as operator &&}
Verwendung von && in R-Wert-Referenzen
Als Bestandteil des neuen C++0x-Standards unterstützt C++Builder jetzt R-Wert-Referenzen. Eine R-Wert-Referenz wird durch das Setzen von && (nicht durch and) nach einem Typ in einer Deklaration wie folgt gebildet:
Apt a;
Apt&& a_ref1 = a;
Ein Hauptunterschied zwischen der bekannten L-Wert-Referenz und der neuen R-Wert-Referenz ist, dass R-Wert-Referenzen an temporäre Werte gebunden werden können (d.h. an einen R-Wert). Eine L-Wert-Referenz (zumindest eine, die keine const ist) kann nicht an einen R-Wert gebunden werden.