Hey, ich komme bei einer Altfrage von Programmieren-Klausuren gerade etwas an meine Grenzen. Es geht um folgenden Ausdruck:
int i = 3; i = -++i + (i = i-- - 3);
Ich konnte die Auswertung nun folgendermaßen aufschlüsseln:
Was ich dabei nicht kapiere: Wieso wird der Prefixoperator ++ ausgewertet, bevor der Inhalt der Klammer evaluiert wird? Bzgl. der Präzedenz konnte ich da nichts finden, das diesen Umstand erklärt, da Klammern höher gewertet werden sollten als Prefix Plus.
int i = 3; i = -++i + (i = i-- - 3);
Ich konnte die Auswertung nun folgendermaßen aufschlüsseln:
- Zuerst wird der Prefix-Operator auf das i angewendet und wir haben als neuen Wert vor dem Plus durch das unary Minus eine -4.
- Nun wird die Klammer ausgewertet und dabei der Postfix-Operator auf unsere Variable (i = 4) ausgeführt.
- Das Dekrementieren von i ist vorgemerkt und die Operation i (4) - 3 wird ausgeführt.
- Die Variable i wurde verwendet und wird jetzt durch das Postfix --dekrementiert, also i = 3.
- Aber da der Variable i der Evaluationswert von 4 - 3 zugewiesen wird, "verfällt" der alte Variablenwert und die Auswirkungen des Postfix-Operators sind hinfällig.
- Abschließend wird -4 + 1 ausgewertet und wir erhalten - 3 als Zuweisung für i.
Was ich dabei nicht kapiere: Wieso wird der Prefixoperator ++ ausgewertet, bevor der Inhalt der Klammer evaluiert wird? Bzgl. der Präzedenz konnte ich da nichts finden, das diesen Umstand erklärt, da Klammern höher gewertet werden sollten als Prefix Plus.
Zuletzt bearbeitet: