Heim >Backend-Entwicklung >C++ >Warum ist „i = i 1;' jetzt in C 17 zulässig?

Warum ist „i = i 1;' jetzt in C 17 zulässig?

Barbara Streisand
Barbara StreisandOriginal
2024-11-01 06:38:01715Durchsuche

Why is `i = i     1;` now legal in C  17?

C 17 Legalisiert i = i 1; Aufgrund der überarbeiteten Betreiberbewertungsverordnung

In C 11 ist die Zuordnung i = i 1; wurde als undefiniertes Verhalten angesehen. Im Jahr 17. Jh. wurde es jedoch zu einem gültigen Ausdruck. Um diese Änderung zu verstehen, müssen wir uns mit den überarbeiteten Regeln für die Operatorbewertung befassen.

Undefiniertes Verhalten vor C 17

In C 11 die Reihenfolge der Operandenbewertungen für Zuweisungsoperatoren wurde wie folgt definiert:

  • Die Wertberechnungen der Operanden wurden vor der Zuweisungsoperation sequenziert.
  • Nebeneffekte auf eine Skalarvariable wurden im Vergleich zu den beiden anderen Nebenwirkungen nicht sequenziert und Wertberechnungen.

In i = i 1; weist das Post-Inkrement i Nebenwirkungen auf (Änderung des Werts von i), die verschachtelt mit der Zuweisungsoperation auftreten können. Dieses Potenzial für nicht sequenzierte Nebenwirkungen führte zu undefiniertem Verhalten.

Überarbeitete Sequenzierungsregel von C 17

C 17 führte eine neue Sequenzierungsregel für Zuweisungsoperatoren ein:

  • Der rechte Operand wird vor dem linken Operanden sequenziert.

Diese überarbeitete Regel gilt sowohl für die Wertberechnungen als auch für die Nebenwirkungen des rechten Operanden.

Legalisierung von i = i 1;

In i = i 1; ist der rechte Operand i 1. Die Auswertung dieses Ausdrucks beinhaltet das Postfix-Inkrement von i in den Klammern, gefolgt von der Addition von 1 . Gemäß der neuen Regel wird diese gesamte Bewertung vor der Zuweisung zu i sequenziert und abgeschlossen.

Daher wird in C 17 der Akt des Modifizierens von i (Nebenwirkung) vor der eigentlichen Zuweisung abgeschlossen, wodurch die Potenzial für unauffällige Nebenwirkungen. Diese überarbeitete Reihenfolge macht i = i 1; Ausdruck legal in C 17.

Das obige ist der detaillierte Inhalt vonWarum ist „i = i 1;' jetzt in C 17 zulässig?. 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