Operatore condizionale: ?:

Sintassi

expression ? expression : expression

Osservazioni:

L'operatore condizionale (? :) è un operatore ternario (richiede tre operandi). L'operatore condizionale funziona nel modo seguente:

  • Il primo operando viene convertito in modo implicito in bool. Viene valutato e tutti gli effetti collaterali vengono completati prima di continuare.

  • Se il primo operando restituisce true (1), viene valutato il secondo operando.

  • Se il primo operando restituisce false (0), viene valutato il terzo operando.

Il risultato dell'operatore condizionale è il risultato di qualunque operando venga valutato: il secondo o il terzo. Solo uno degli ultimi due operandi viene valutato in un'espressione condizionale.

Le espressioni condizionali presentano un'associatività da destra a sinistra. Il primo operando deve essere di tipo integrale o puntatore. Le regole seguenti si applicano al secondo e terzo operando:

  • Se entrambi gli operandi sono dello stesso tipo, il risultato è di quel tipo.

  • Se entrambi gli operandi sono di tipi aritmetici o di enumerazione, le normali conversioni aritmetiche (descritte nelle conversioni standard) vengono eseguite per convertirle in un tipo comune.

  • Se entrambi gli operandi sono di tipo puntatore o se uno è un tipo puntatore e l'altro è un'espressione costante che restituisce 0, vengono eseguite le conversioni del puntatore per convertire tali operandi in un tipo comune.

  • Se entrambi gli operandi sono di tipo riferimento, vengono eseguite le conversioni dei riferimenti per convertirli in un tipo comune.

  • Se entrambi gli operandi sono di tipo void, il tipo comune è il tipo void.

  • Se entrambi gli operandi sono dello stesso tipo definito dall'utente, il tipo comune è di quel tipo.

  • Se gli operandi sono di tipi diversi e almeno un operando è di un tipo definito dall'utente, per determinare il tipo comune vengono usate le regole del linguaggio. Vedere l'avviso di seguito.

Tutte le combinazioni del secondo e del terzo operando che non si trovano nell'elenco precedente non sono valide. Il tipo del risultato è il tipo comune e si tratta di un l-value se sia il secondo che il terzo operando sono dello stesso tipo e sono entrambi l-value.

Avviso

Se i tipi del secondo e terzo operando non sono identici, vengono richiamate regole di conversione di tipo complesso, come specificato nello standard C++. Queste conversioni possono causare un comportamento imprevisto, ad esempio la costruzione e l'eliminazione di oggetti temporanei. Per questo motivo, è consigliabile (1) evitare di usare tipi definiti dall'utente come operandi con l'operatore condizionale oppure (2), se si usano tipi definiti dall'utente, eseguire il cast in modo esplicito di ogni operando a un tipo comune.

Esempio

// expre_Expressions_with_the_Conditional_Operator.cpp
// compile with: /EHsc
// Demonstrate conditional operator
#include <iostream>
using namespace std;
int main() {
   int i = 1, j = 2;
   cout << ( i > j ? i : j ) << " is greater." << endl;
}

Vedi anche

Operatori C++, precedenza e associazione
Operatore di espressione condizionale