Wenn Sie die folgenden Schritte aus:Hat die ternäre Operator Kurzschluss in definierter Weise
if (x)
{
y = *x;
}
else
{
y = 0;
}
Dann wird das Verhalten garantiert definiert werden, da können wir nur dereferenzieren x
wenn es nicht 0
Kann das ist gleiche gesagt werden für:
y = (x) ? *x : 0;
Dies scheint wie erwartet zu arbeiten (auch mit -Wpedantic
auf g ++ kompiliert)
Ist das garantiert?
Ja - Der ternäre Operator ist nur syntaktischer Zucker –
Ja. (Zu kurz, um als Antwort gepostet zu werden). – JSF
Es gibt keinen "Kurzschluss" im ternären Ausdruck. Und es wird keine Verzweigung vorzeitig ausgewertet oder ausgeführt, bevor die Bedingung vollständig ausgewertet wurde. –