Heim >Backend-Entwicklung >C++ >Warum ist „i = i 1;' jetzt in C 17 zulässig?
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:
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:
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!