Dela via


Conditional-Expression operator

C har en ternary-operator: operatorn för villkorsuttryck (? :).

Syntax

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

logical-OR-expression Måste ha en integrerad, flytande eller pekartyp. Det utvärderas i termer av dess motsvarighet till 0. En sekvenspunkt följer logical-OR-expression. Utvärderingen av operanderna fortsätter enligt följande:

  • Om logical-OR-expression inte är lika med 0 expression utvärderas. Resultatet av utvärderingen av uttrycket ges av den icke-terminala expression. (Det innebär att expression endast utvärderas om logical-OR-expression är sant.)

  • Om logical-OR-expression är lika med 0 conditional-expression utvärderas. Resultatet av uttrycket är värdet för conditional-expression. (Det innebär att conditional-expression endast utvärderas om logical-OR-expression det är falskt.)

Effekten är antingen expression eller conditional-expression utvärderas, men inte båda.

Typen av resultat av en villkorsstyrd åtgärd beror på typen av expression eller conditional-expression operanden, enligt följande:

  • Om expression eller conditional-expression har en integrerad eller flytande typ (deras typer kan vara olika) utför operatorn de vanliga aritmetiska konverteringarna. Typen av resultat är typen av operander efter konverteringen.

  • Om både expression och conditional-expression har samma struktur, union eller pekartyp är typen av resultat samma struktur, union eller pekartyp.

  • Om båda operanderna har typen voidhar resultatet typen void.

  • Om någon av operanderna är en pekare till ett objekt av någon typ och den andra operanden är en pekare till voidkonverteras pekaren till en pekare till void och resultatet är en pekare till void.

  • Om antingen expression eller conditional-expression är en pekare och den andra operanden är ett konstant uttryck med värdet 0, är typen av resultat pekartypen.

I typjämförelsen för pekare ärver alla typer av kvalificerare (const eller volatile) i den typ som pekarpunkterna är obetydliga till, men resultattypen ärver kvalificerarna från båda komponenterna i villkoret.

Exempel

I följande exempel visas användning av den villkorsstyrda operatorn:

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

I det här exemplet tilldelas det absoluta värdet i för till j. Om i är mindre än 0 -i tilldelas till j. Om i är större än eller lika med 0 i tilldelas till j.

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

I det här exemplet deklareras två funktioner, f1 och f2, och två variabler, x och y. Senare i programmet anropas funktionen f1 om de två variablerna har samma värde. Annars f2 anropas.

Se även

Villkorsstyrd operator: ? :