Heim >Backend-Entwicklung >C++ >Warum ist die Ausgabe mehrerer Post-Inkremente in einem C-Ausdruck unvorhersehbar?

Warum ist die Ausgabe mehrerer Post-Inkremente in einem C-Ausdruck unvorhersehbar?

Mary-Kate Olsen
Mary-Kate OlsenOriginal
2024-11-05 21:58:02387Durchsuche

Why is the Output of Multiple Post Increments in a C   Expression Unpredictable?

Verhalten von Post-Inkrement in C

In C erhöht Post-Inkrement (z. B. i ) eine Variable, gibt aber den ursprünglichen Wert zurück. Bei komplexen Ausdrücken ist es von entscheidender Bedeutung, sein Verhalten zu verstehen.

Bedenken Sie den folgenden Code:

<code class="cpp">int i = 5;

cout << i++ << i-- << ++i << --i << i << endl;</code>

Diese Anweisung wertet den Ausdruck i i-- i --i i aus, bevor das Ergebnis ausgegeben wird. Die Reihenfolge der Auswertung ist jedoch undefiniert, was zu einer unvorhersehbaren Ausgabe führt (z. B. „45555“).

Lassen Sie uns die Sequenzpunktregel aufschlüsseln:

  • Sequenzpunkte: In C erzwingen bestimmte Punkte im Code die Auswertung ausstehender Vorgänge. Zu diesen Punkten gehören Semikolons (;), Kommas (,) und das Ende der Anweisung.
  • Undefiniertes Verhalten: Im obigen Code gibt es nicht sequenzierte Nebenwirkungen auf die Skalarvariable i aufgrund von Post-Inkrementierungsvorgängen. Dies führt zu undefiniertem Verhalten.

Beispiel:

<code class="cpp">int x = 20, y = 35;

x = y++ + y + x++ + y++;</code>

Dieser Ausdruck wird in der folgenden Reihenfolge ausgewertet:

  1. y : Erhöht y auf 36 und gibt 35 zurück (den ursprünglichen Wert von y).
  2. x : Erhöht x auf 21 und gibt 20 (den ursprünglichen Wert von x) zurück.
  3. y : Erhöht y auf 37 und gibt 36 (den ursprünglichen Wert von y) zurück.
  4. x: Erhöht x auf 22 und gibt 21 (den ursprünglichen Wert von x) zurück.

Daher ist der Endwert von x ist 126 (35 36 20 21), während y 37 ist.

Schlussfolgerung:

Post-Inkrementierung in C kann zu undefiniertem Verhalten führen, wenn es in nicht sequenzierten Ausdrücken verwendet wird. Es ist wichtig, Sequenzpunkte zu verstehen und Nebenwirkungen auf dieselbe Variable in einem nicht sequenzierten Kontext zu vermeiden.

Das obige ist der detaillierte Inhalt vonWarum ist die Ausgabe mehrerer Post-Inkremente in einem C-Ausdruck unvorhersehbar?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Stellungnahme:
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn