Der bedingte Operator

Dieser Artikel beschäftigt sich mit einem eher „exotischem“ Operator. Seine Syntax mutet etwas seltsam an, und er wird auch nur mehr selten verwendet.
Nichtsdestotrotz darf er in keinem C und C++ Tutorial fehlen.

Syntax

Die Syntax lautet wie folgt:

<bedingung> ? <ausdruck> : <ausdruck>

Wobei <bedingung> ein logischer Ausdruck sein muss, also entweder wahr oder falsch sein muss,
und <ausdruck> ein beliebiger Ausdruck.

Semantik

Was er tut:

Wenn <bedingung> wahr ist, ist der Rückgabewert dieses Operators der erste <ausdruck>, ansonsten gibt er den zweiten <ausdruck> zurück.

Beispiel

Etwas klarer sollte der Operator mit einem kleinen Beispiel werden:

int main()
{
    int seven_is_good = 0;
    int var;
 
    var = seven_is_good ? 3 : 7;
    printf("var ist jetzt %d\n",var); /* var ist jetzt 7 */
 
    seven_is_good = 1;
    var = seven_is_good ? 3 : 7;
    printf("var ist jetzt %d\n",var); /* var ist jetzt 3 */
 
 
    return 0;
}

Erweiterte Anwendung

Der Operator kann auch verschachtelt werden, dabei ist eine (oder beide) der <ausdruck>e ebenfalls der bedingte Operator. Beispiel:

int main()
{
    int b = 11;
    int m = b>10 ? 7 : b > 5 ? 2 : 4;    
    int n;
 
    /* zur Erläuterung kann der obige Initialisierungsausdruck
    * auch mit if-Verzweigungen Ausgedrückt werden.
    */
    if (b>10)
        n = 7;
    else
    {
        if (b > 5)
            n = 2;
        else
            n = 4;
    }
 
    printf ("m ist %d\n", m);
    printf ("n ist %d\n", n);
 
    return 0;
}

Einer der <ausdruck>e darf auch eine kommagetrennte Liste sein.

Erwähnt sein noch, dass es wegen der schlechten Lesbarkeit (und wegen des fehlenden „Bekanntheitsgrades“) manchmal besser ist auf diesen Operator zu verzichten. Eine der einigermaßen eleganten Anwendungsmöglichkeiten ist die Initialisierung von Variablen:

int wert = (bedingung )
         ? value_true
         : value_false;

In diesem Sinne, fröhliches conditional operating ;-)