Conditional expression operator ?:



  • Mein gcc akzeptiert folgenden Code:

    int main()
    {
      int i = 5;
    
      i = 4 ? : 2;
    }
    

    Das habe ich noch nie gesehen, auch im Web habe ich zu dieser Syntax nichts gefunden.

    Soetwas wie:

    i = "abc" ?: 4;
    

    Ergibt einen Konvertierungsfehler (char*/int). Ist also der "binaere ?:-Operator" soetwas wie der "or"-Operator aus Perl, der die von links erste wahre Expression zurueckgibt?

    Gunnar



  • Sicher, dass das nicht so aussieht:

    [cpp]
    int main () {
    int i = 5;
    i = 4 ? 3 : 2;

    return 0;
    }
    [/cpp]

    andernfalls wäre das nämlich falsch.

    der trinäre Operator ist einfach eine abkürzung für if/else,
    der Ausdrück vor dem Fragezeichen wird auf sein Wahrheitsgehalt geprüft, wenn
    dieser Wahr ist, wird der Wert/Ausdruck nach dem Fragezeichen verwendet, andernfalls
    der nachdem Doppelpunkt.

    Das andere Funktioniert nicht, weil "abc" eine Zeichenkette ist und für diese
    wird ein zeiger auf ein Zeichen verwendet.
    Folgendes würde gehen:
    char * i = "abc" ? "wahr" : "falsch";



  • ?: ohne Mittel-Operand ist eine gcc-Erweiterung, siehe Doku:

    The middle operand in a conditional expression may be omitted. Then
    if the first operand is nonzero, its value is the value of the
    conditional expression.



  • Danke fuer die Antworten.

    Das ist aber eine sinnloses Erweiterung.

    -Gunnar



  • Warum? Wenn sie sinnlos wär, hätt sich bestimmt keiner die Mühe gemacht, sie zu implementieren.


Anmelden zum Antworten