?: oder if-else ?



  • Hi,
    Also ich finde
    Ausdruck ? Ausdruck1 : Ausdruck2
    syntaktisch irgendwie nicht so toll wie

    if(Ausdruck)
    Ausdruck1
    else
    Ausdruck2

    Bringt das Auswahloperatording irgendwelche Vorteile oder kann ich immer if-else verwenden ?

    Danke und Tschö

    [ Dieser Beitrag wurde am 26.05.2003 um 17:44 Uhr von Falky editiert. ]



  • Du kannst den ?-Operator zum Beispiel in einer Initialisierungsliste eines Konstruktors benutzen (wo if-else nicht möglich ist)



  • oder in einem funktionsaufruf:

    pos (s_x+(i>=0?i:-i), s_y+k);
    


  • Hallo,
    der Vorteil des ?:-Operators ist, dass man ihn in Ausdrücken verwenden kann.
    Neben dem Einsatz in der Initialisierungsliste, wird er deshalb auch häufig bei der Objekterzeugung verwendet.
    Beispiel:

    std::string boolAsString(boolValue ? "true" : "false");
    

    Ohne den ?:-Operator müsste ich hier Erzeugung und Initialisierung trennen oder auf die Verwendung eines Zeigers umsteigen.

    Erzeugung und Initialisierung kann man aber auch nicht immer trennen.
    Für Referenzen und Konstanten die mit einem von einer Bedingung abhängenden Wert initialisiert werden sollen, bleibt nur der ?:-Operator.

    Auch können if-then-else-Anweisungen im Gegensatz zum ?:-Operator nicht in Compilezeitkonstrukten (Template-Metaprogrammierung) verwendet werden.

    Häufig finde ich persönlich den resultierenden Code auch einfacher.
    Bsp:

    string result((!outputDir_.empty() ? outputDir_ : dir) +read+".html");
    

    Das ist IMO deutlich besser als:

    string result;
    if (!outputDir_.empty())
        result += outputDir_;
    else
        result += dir;
    result += read+".html";
    

Anmelden zum Antworten