Relationale Operatoren: <, >, <= und >=

Syntax

expression < expression
expression > expression
expression <= expression
expression >= expression

Hinweise

Die binären relationalen Operatoren bestimmen die folgenden Beziehungen:

  • Kleiner als (<)

  • Größer als (>)

  • Kleiner oder gleich (<=)

  • Größer als oder gleich (>=)

Die relationalen Operatoren haben Assoziativität von links nach rechts. Beide Operanden aus relationalen Operatoren müssen vom arithmetischen oder vom Zeigertyp sein. Sie ergeben Werte des Typs bool. Der zurückgegebene Wert ist false (0), wenn die Beziehung im Ausdruck falsch ist. Andernfalls wird der Wert true (1) zurückgegeben.

Beispiel

// expre_Relational_Operators.cpp
// compile with: /EHsc
#include <iostream>

using namespace std;

int main() {
   cout  << "The true expression 3 > 2 yields: "
         << (3 > 2) << endl
         << "The false expression 20 < 10 yields: "
         << (20 < 10) << endl;
}

Die Ausdrücke im vorangehenden Beispiel müssen in Klammern gesetzt werden, denn der Operator zum Einfügen des Datenstroms (<<) hat Vorrang vor den relationalen Operatoren. Daher würde der erste Ausdruck ohne Klammern wie folgt ausgewertet:

(cout << "The true expression 3 > 2 yields: " << 3) < (2 << "\n");

Die üblichen arithmetischen Konvertierungen, die in Standardkonvertierungen beschrieben werden, werden auf Operanden arithmetischer Typen angewendet.

Vergleichen von Zeigern

Wenn zwei Zeiger auf Objekte vom gleichen Typs verglichen werden, wird das Ergebnis nach der Position der Objekte bestimmt, auf die im Adressbereich des Programms gezeigt wird. Zeiger können ebenfalls mit einem konstanten Ausdruck verglichen werden, der zu 0 oder einen Zeiger vom Typ void * ausgewertet wird. Wenn ein Zeigervergleich mit einem Zeiger vom Typ void * durchgeführt wird, wird der andere Zeiger implizit in den Typ void * konvertiert. Anschließend wird verglichen.

Zwei Zeiger verschiedener Typen können nicht verglichen werden, es sei denn:

  • Ein Typ ist ein Klassentyp, der vom anderen Typ abgeleitet wird.

  • Mindestens einer der Zeiger wird explizit in den Typ void * konvertiert (umgewandelt). (Der andere Zeiger wird ür die Konvertierung implizit in den Typ void * konvertiert.)

Zwei Zeiger desselben Typs, die auf dasselbe Objekt zeigen, sind beim Vergleich garantiert gleich. Wenn zwei Zeiger auf nicht statische Member eines Objekts verglichen werden, gelten folgende Regeln:

  • Wenn die Klasse nicht vom Typ union ist und wenn die beiden Member nicht durch einen access-specifier, z. B. public, protected oder private, getrennt sind, ergibt der Zeiger auf den zuletzt deklarierten Member beim Vergleich einen größeren Wert als der Zeiger auf den zuvor deklarierten Member.

  • Wenn die zwei Member durch einen access-specifier getrennt sind, sind die Ergebnisse nicht definiert.

  • Wenn die Klasse vom Typ union ist, sind Zeiger auf unterschiedliche Datenelemente in dieser union beim Vergleich gleich.

Wenn zwei Zeiger auf Elemente desselben Arrays oder auf ein Element über das Ende des Arrays hinaus zeigen, erzielt der Zeiger auf das Objekt mit dem höheren Index einen höheren Wert. Der Vergleich von Zeigern ist nur dann garantiert gültig, wenn der Zeiger auf Objekte im gleichen Array oder auf die Position verweist, die eine Stelle nach dem Ende des Arrays liegt.

Siehe auch

Ausdrücke mit binären Operatoren
Integrierte C++-Operatoren, Rangfolge und Assoziativität
C-Operatoren (relational) und C-Gleichheitsoperatoren