short: if else
-
hallo,
ich habe mal irgendwo gehört das es statt der üblichen
if ()
{}
else
{}ne kürzere version gibt mit "?" und ":" .. erklärt mal wer bitte den syntax?
-
expression ? if_exp_true : if_exp_false
zB
int max(int a, int b) { if(a>b) return a; else return b; }
könnte man auch so schreiben:
int max(int a, int b) { return a>b ? a : b; }
-
if(ausdruck1){ ausdruck2 } else { ausdruck3 } ausdruck1?ausdruck2:ausdruck3;
beachte aber, dass du nur einen ausdruck bei der verwendung von ?: benutzen kannst,im inneren von ?: ist kein semicolon erlaubt,ein weiter verschachteltes if/else ist verboten, aber ein ?: ist erlaubt.
verboten:
ausdruck1?ausdruck2;ausdruck3:ausdruck4;
-
wenn ich mich richtig entsinne kannst du aber mehrer befehle mit nem komma trennen und dann frisst der das wieder
also z.b. ++i>9?++y,++z:++x; sollte funzen...
-
Nein, du kannst überhaupt kein einziges Statement angeben, sondern nur Ausdrücke. Weil es sich hier um eine Zuweisung handelt.
-
++i>9?++y,++z:++x;
funktioniert genau dann, wenn x,y und z den selben datentyp haben...
-
y muss nicht denselben Datentyp wie z und x haben.
-
z und x aber auch nicht. nur dann vorsicht:
bool x; cin >> x; { int a=1, b=1; (x ? a : b) += 1; } { int a=1; char b=1; (x ? a : b) += 1; //nein }
-
Bringt das eigentlich irgendwas, abgesehen das es weniger Source ist ?
Perfomance mässig dürfte doch beides gleich viel kosten...Devil
-
Nahezu immer ist ein if vorzuziehen - denn das ist lesbarer. Und wenn ein Compiler bei ?: schlechteren Code als bei if() erzeugt -> in die Tonne damit.
-
devil81 schrieb:
Bringt das eigentlich irgendwas, abgesehen das es weniger Source ist ?
Naja es ist eben ein Ausdruck und keine Anweisung, d.h. du kannst den Operator in Situationen einsetzen, in denen keine Anweisung erlaubt ist:
// initialisiererliste: Foo(bool b): bar(b ? quux() : quuxl()) {}; // besonders bei referenzen: Foo& f = b ? g : h; // etc.
Der Wahre Grund(TM) ist allerdings, um der Sprache ein Gefühl von Lisp zu geben
Der Kommaoperator spricht auch dafür.