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.