Operatore di espressione condizionale

C ha un operatore ternario: l'operatore espressione condizionale (? :).

Sintassi

conditional-expression:
logical-OR-expression
logical-OR-expression ? expression : conditional-expression

Deve logical-OR-expression avere tipo integrale, mobile o puntatore. Viene valutata in termini di equivalenza a 0. Un punto di sequenza segue logical-OR-expression. La valutazione degli operandi prosegue nel modo seguente:

  • Se logical-OR-expression non è uguale a 0, expression viene valutato. Il risultato della valutazione dell'espressione viene dato dall'oggetto non terminal expression. (Significa expression che viene valutato solo se logical-OR-expression è true).

  • Se logical-OR-expression uguale a 0, conditional-expression viene valutato. Il risultato dell'espressione è il valore di conditional-expression. (Significa conditional-expression che viene valutato solo se logical-OR-expression è false).

L'effetto è, expression o conditional-expression viene valutato, ma non entrambi.

Il tipo del risultato di un'operazione condizionale dipende dal tipo di expression operando o conditional-expression , come indicato di seguito:

  • Se expression o conditional-expression ha un tipo integrale o mobile (i relativi tipi possono essere diversi), l'operatore esegue le normali conversioni aritmetiche. Il tipo del risultato è il tipo degli operandi in seguito alla conversione.

  • Se entrambi expression hanno conditional-expression la stessa struttura, l'unione o il tipo puntatore, il tipo del risultato è lo stesso tipo di struttura, unione o puntatore.

  • Se entrambi gli operandi possiedono il tipo void, il risultato è di tipo void.

  • Se uno degli operandi è un puntatore a un oggetto di qualsiasi tipo e l'altro operando è un puntatore a void, il puntatore all'oggetto viene convertito in un puntatore a void e il risultato è un puntatore a void.

  • expression Se o conditional-expression è un puntatore e l'altro operando è un'espressione costante con il valore 0, il tipo del risultato è il tipo di puntatore.

Nel confronto dei tipi per i puntatori, qualsiasi qualificatore di tipo (const o volatile) nel tipo a cui i punti puntatori sono insignificanti, ma il tipo di risultato eredita i qualificatori da entrambi i componenti del condizionale.

Esempio

Negli esempi seguenti vengono illustrati gli utilizzi dell'operatore condizionale.

j = ( i < 0 ) ? ( -i ) : ( i );

In questo esempio viene assegnato il valore assoluto i a j. Se i è minore di 0, -i è assegnato a j. Se i è maggiore o uguale a 0, i è assegnato a j.

void f1( void );
void f2( void );
int x;
int y;
    .
    .
    .
( x == y ) ? ( f1() ) : ( f2() );

In questo esempio le due funzioni f1 e f2 e le due variabili x e y vengono dichiarate. Più avanti nel programma, se le due variabili presentano lo stesso valore, viene chiamata la funzione f1. In caso contrario, viene chiamato f2.

Vedi anche

Operatore condizionale: ? :