Heim > Backend-Entwicklung > C++ > Warum ist „i = i 1' in C 17 zulässig, in C 11 jedoch undefiniertes Verhalten?

Warum ist „i = i 1' in C 17 zulässig, in C 11 jedoch undefiniertes Verhalten?

Mary-Kate Olsen
Freigeben: 2024-10-27 09:53:30
Original
345 Leute haben es durchsucht

Why is

i = i 1 in C 17 legal machen

In C 11 ist der Ausdruck „i = i 1“ ein undefiniertes Verhalten aufgrund von unzureichende Sequenzierungsgarantien. In C 17 wird dieser Ausdruck jedoch legal. Hier ist der Grund:

C 11

In C 11 gaben die Sequenzierungsregeln für den Zuweisungsoperator (=) an, dass die Zuweisung nach der Wertberechnung des Rechts sequenziert wurde und linke Operanden. Es gab jedoch keine spezifischen Regeln für die relative Reihenfolge der Zuweisung und der Nebenwirkungen im rechten Operanden. Dieser Mangel an Sequenzierung führte in Fällen wie „i = i 1“ zu undefiniertem Verhalten, bei dem der Nebeneffekt (Inkrementierung von i) und die Zuweisung möglicherweise nicht sequenziert waren.

C 17

C 17 führt eine neue Reihenfolgeregel für den Zuweisungsoperator ein: „Der rechte Operand wird vor dem linken Operanden geordnet.“ Dies bedeutet, dass alle Nebeneffekte und Wertberechnungen innerhalb des rechten Operanden vollständig sequenziert werden, bevor eine Aktion am linken Operanden stattfindet, einschließlich der Zuweisung selbst.

Wirkung auf „i = i 1“

Mit der neuen Sequenzierungsregel in C 17 wird der Ausdruck „i = i 1“ zulässig, da der Nebeneffekt des Inkrementierens von i (durchgeführt durch den Postfix-Operator) jetzt garantiert vor der Zuweisung auftritt. Daher ist der Vorgang der Zuweisung des Werts von „i 1“ zu i vollständig von der Nebenwirkung isoliert, wodurch das undefinierte Verhalten, das in C 11 existierte, beseitigt wird.

Zusammenfassend lässt sich sagen, dass sich die Reihenfolgeregeln für die Zuweisung geändert haben Der Operator in C 17 stellt sicher, dass die Auswertung von „i = i 1“ einer bestimmten Reihenfolge folgt, wodurch der Nebeneffekt des Erhöhens von i vor der Zuweisung selbst stattfinden kann und das undefinierte Verhalten behoben wird, das in C 11 existierte.

Das obige ist der detaillierte Inhalt vonWarum ist „i = i 1' in C 17 zulässig, in C 11 jedoch undefiniertes Verhalten?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Quelle:php.cn
Erklärung dieser Website
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
Neueste Artikel des Autors
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage