Undefiniertes Verhalten in c / c ++: i ++ + ++ i vs ++ i + i ++ [duplizieren]

Diese Frage hat hier bereits eine Antwort:

Warum verwenden diese Konstrukte undefiniertes Verhalten vor und nach dem Inkrementieren? 14 answers

Stellen Sie sich vor, wir haben den folgenden Code:

int i = 1;
int j = i++ + ++i;

Ich weiß, dass dies ein undefiniertes Verhalten ist, da vor dem Semikolon, das ein Sequenzpunkt ist, der Wert voni wurde mehr als einmal geändert. Dies bedeutet, dass der Compiler auch dann zwei Möglichkeiten hat, wenn der Operator plus Vorrang von links nach rechts hat:

Fall 1

nimm den Wert voni++ --- Wert voni ist 1nimm den Wert von++i --- Wert voni ist 2tun Sie den Operator plus und weisen Sie das Ergebnis, das 3 ist, @ zj und die Nebenwirkung voni++ (Die Reihenfolge dieses Schritts ist ebenfalls undefiniert, aber das interessiert uns nicht, da es das Ergebnis nicht ändert.)

case 2)

nimm den Wert voni++ --- Wert voni ist 1do die Nebenwirkung voni++ --- Wert voni ist 2nimm den Wert von++i --- aktueller Wert voni ist 3tun Sie den Operator plus und weisen Sie das Ergebnis, das 4 ist, @ zj

Wenn hier nichts falsch ist, habe ich eine Frage:

int j = ++i + i++;

Ist der obige Code noch ein undefiniertes Verhalten?

einer Meinung nach gibt es nur eine Möglichkeit:

do die Nebenwirkung von++i --- Wert voni ist 2nimm den Wert voni++ --- Wert voni ist 2tun Sie den Operator plus und weisen Sie das Ergebnis, das 4 ist, @ zj und die Nebenwirkung voni++ (Die Reihenfolge dieses Schritts ist ebenfalls undefiniert, aber das interessiert uns nicht, da es das Ergebnis nicht ändert.)

Habe ich recht

Btw Ich habe diesen Link gelesen:
Undefiniertes Verhalten und Sequenzpunkte

Antworten auf die Frage(6)

Ihre Antwort auf die Frage