Share via


Operatori relazionali: <, >, <=e >=

Sintassi

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

Osservazioni:

Gli operatori relazionali binari determinano le relazioni seguenti:

  • Meno di (<)

  • Maggiore di (>)

  • Minore o uguale a (<=)

  • Maggiore o uguale a (>=)

Gli operatori relazionali hanno un'associatività da sinistra a destra. Entrambi gli operandi degli operatori relazionali devono essere di tipo aritmetico o di tipo puntatore. Producono valori di tipo bool. Il valore restituito è false (0) se la relazione nell'espressione è false; in caso contrario, il valore restituito è true (1).

Esempio

// 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;
}

Le espressioni nell'esempio precedente devono essere racchiuse tra parentesi perché l'operatore di inserimento del flusso (<<) ha una precedenza superiore rispetto agli operatori relazionali. Di conseguenza, la prima espressione senza le parentesi verrebbe valutata come:

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

Le normali conversioni aritmetiche descritte nelle conversioni standard vengono applicate agli operandi di tipi aritmetici.

Confronto tra puntatori

Quando vengono confrontati due puntatori a oggetti dello stesso tipo, il risultato è determinato dalla posizione degli oggetti puntati nello spazio degli indirizzi del programma. I puntatori possono anche essere confrontati con un'espressione costante che restituisce 0 o a un puntatore di tipo void *. Se viene eseguito un confronto tra puntatori a un puntatore di tipo void *, l'altro puntatore viene convertito in modo implicito nel tipo void *. A questo punto, viene eseguito il confronto.

Non è possibile eseguire il confronto di due puntatori di tipo diverso, tranne nei seguenti casi:

  • Un tipo è un tipo di classe derivato dall'altro tipo.

  • Almeno uno dei puntatori viene convertito in modo esplicito (cast) nel tipo void *. L'altro puntatore viene convertito in modo implicito nel tipo void * per la conversione.

Due puntatori dello stesso tipo che puntano allo stesso oggetto risultano sicuramente uguali. Se due puntatori a membri non statici di un oggetto vengono confrontati, è necessario rispettare le seguenti regole:

  • Se il tipo di classe non è un unione se i due membri non sono separati da un identificatore di accesso, ad esempio public, protectedo private, il puntatore al membro dichiarato per ultimo confronterà maggiore del puntatore al membro dichiarato in precedenza.

  • Se i due membri sono separati da un identificatore di accesso, i risultati non sono definiti.

  • Se il tipo di classe è un union, puntatori a membri di dati diversi in tale union confronto è uguale.

Se due puntatori puntano a elementi della stessa matrice o all'elemento uno oltre la fine della matrice, il puntatore all'oggetto con indice maggiore risulta maggiore. Il confronto tra puntatori è sicuramente valido solo quando i puntatori fanno riferimento a oggetti nella stessa matrice o alla posizione uno oltre la fine della matrice.

Vedi anche

Espressioni con operatori binari
Operatori C++, precedenza e associazione
Operatori relazionali e operatori di uguaglianza C