Opérateur d'expression conditionnelle
C contient un opérateur ternaire : l'opérateur d'expression conditionnelle (? :
).
Syntaxe
conditional-expression
:
logical-OR-expression
logical-OR-expression
?
expression
:
conditional-expression
logical-OR-expression
doit être de type intégral, flottant ou pointeur. Il est évalué en termes d'équivalence à 0. Un point de séquence suit logical-OR-expression
. L’évaluation des opérandes continue comme suit :
Si
logical-OR-expression
elle n’est pas égal à 0,expression
est évalué. Le résultat de l'évaluation de l'expression est fourni par l'élément non terminalexpression
. (Cela signifie queexpression
est évaluée uniquement silogical-OR-expression
a la valeur true.)Si
logical-OR-expression
est égal à 0,conditional-expression
est évalué. Le résultat de l’expression est la valeur deconditional-expression
. (Cela signifie queconditional-expression
est évaluée uniquement silogical-OR-expression
a la valeur false.)
L’effet expression
ou conditional-expression
est évalué, mais pas les deux.
Le type du résultat d’une opération conditionnelle dépend du type de l’opérande expression
ou conditional-expression
, comme suit :
Si
expression
ouconditional-expression
a un type intégral ou flottant (leurs types peuvent être différents), l'opérateur exécute les conversions arithmétiques habituelles. Le type du résultat est le type des opérandes après conversion.Si
expression
etconditional-expression
ont le même type de structure, d'union, ou de pointeur, le type du résultat est le même type de structure, d'union ou de pointeur.Si les deux opérandes ont le type
void
, le résultat a le typevoid
.Si l'un des opérandes est un pointeur vers un objet de tout type, et que l'autre opérande est un pointeur vers
void
, le pointeur vers l'objet est converti en pointeur versvoid
et le résultat est un pointeur versvoid
.Si
expression
ouconditional-expression
est un pointeur et que l’autre opérande est une expression constante ayant la valeur 0, le type du résultat est le type de pointeur.
Dans la comparaison de type pour les pointeurs, les qualificateurs de type (const
ou volatile
) dans le type vers lequel le pointeur pointe ne sont pas significatifs, mais le type de résultat hérite des qualificateurs des deux composants du conditionnel.
Exemples
Les exemples suivants illustrent différentes utilisations de l'opérateur conditionnel :
j = ( i < 0 ) ? ( -i ) : ( i );
Cet exemple assigne la valeur absolue de i
à j
. Si i
est inférieur à 0, -i
est assigné à j
. Si i
est supérieur ou égal à 0, i
est assigné à j
.
void f1( void );
void f2( void );
int x;
int y;
.
.
.
( x == y ) ? ( f1() ) : ( f2() );
Dans cet exemple, deux fonctions, f1
et f2
, et deux variables, x
et y
, sont déclarées. Ultérieurement dans le programme, si deux variables ont la même valeur, la fonction f1
est appelée. Sinon, c'est f2
qui est appelée.
Voir aussi
Commentaires
https://aka.ms/ContentUserFeedback.
Bientôt disponible : Tout au long de 2024, nous allons supprimer progressivement GitHub Issues comme mécanisme de commentaires pour le contenu et le remplacer par un nouveau système de commentaires. Pour plus d’informations, consultezEnvoyer et afficher des commentaires pour