Was könnte <?= sein?
-
Guten Tag!
Ich untersuche einen C++ Code und habe folgendes gefunden:
c <?= a ? a : b;
Was könnte es bedeuten, besonders "<?="?
Danke für die Hilfe.
Almidagu
-
Almidagu schrieb:
Was könnte es bedeuten, besonders "<?="?
"<?=" ist ein Tippfehler.
"x ? y : z" ist ein ternärer Operator, also ein Operator mit drei Argumenten. Es ist eine Kurzform für "if (x) {y} else {z}"
-
Das erste Fragezeichen ist vermutlich ein Fehler und gehört da nicht hin.
Das ganze Konstrukt nennt sich Bedingungsoperator und ist ein ternärer Operator, d.h. er nimmt drei Argumente entgegen. Der erste Ausdruck (vor dem Fragezeichen) muss bool-konvertierbar sein, abhängig davon wird entweder das Ergebnis des Ausdrucks vor dem Doppelpunkt oder nach den Doppelpunkt zurückgegeben.int a = true ? 1 : 0; // weist a den Wert 1 zu int b = a > 0 ? a : -a; // bildet abs nach
-
daddy_felix schrieb:
Es ist eine Kurzform für "if (x) {y} else {z}"
Akribisch betrachtet stimmt das nicht ganz. Der kleine aber feine Unterschied ist, dass der tenäre Operator einen Rückgabewert hat, was
if
nicht haben kann. Auch z.B. das geht:(x ? a : b) = 3;
-
Almidagu schrieb:
Was könnte es bedeuten, besonders "<?="?
Das könnte ein Compound-Assignment sein, wobei <? eine GCC-Extension (Min-Operator) ist. Nach dieser Logik würde
a <?= b;
a dann das Minimum von a und b speichern.
-
kkaw schrieb:
Das könnte ein Compound-Assignment sein, wobei <? eine GCC-Extension (Min-Operator) ist.
Glaube ich auch. Wobei diese Extension mit (Major) Version 4 auch wieder entfernt wurde, der Code wäre also schon geschätzte 8-9 Jahre alt. (GCC 4.0.0 erschien im Juni 2005, jedoch nehme ich an dass der Autor des Codes nicht sofort auf den neuesten GCC umgestiegen ist und einen GCC aus Major Version 3 noch einige Monate (wenn nicht ein Jahr) behalten hat).
Wenn das der Fall ist, können wir den Code umschreiben:
c <?= a ? a : b;
ist äquivalent zu
c = std::min(c, a ? a : b);
Mit der Annahme dass der Min-Operator eine schwächere Bindung hat als der
?:
-Operator, was aber bei allen standardisierten compound assignment Operatoren der Fall ist.Oder mit dem Null Coalescing Conditional Operator
c = std::min(c, a ?: b);
-
Guten Abend!
Ich bin wieder da. Und möchte mich bei allen herzlich bedanken für die für mich se-e-ehr hilfreiche Diskussion.
Ich verstehe jetzt C++ noch bisschen besser
Viele Grüße
Almidagu