Heim > Backend-Entwicklung > C++ > Warum wurde „i = i 1;' in C 17 zu einer legitimen Operation?

Warum wurde „i = i 1;' in C 17 zu einer legitimen Operation?

Susan Sarandon
Freigeben: 2024-10-29 03:19:02
Original
1048 Leute haben es durchsucht

Why Did

Warum i = i 1; Wurde in C 17 legal

In C 11 wurde das Codefragment „i = i 1;“ undefiniertes Verhalten aufgerufen. In C 17 wurde dieser Kodex jedoch rechtlich zulässig. Diese Änderung ergibt sich aus den in C 17 eingeführten erweiterten Sequenzierungsgarantien.

Gemäß dem C 11-Standard [N3337 basic.exec] ist die Sequenzierung von Nebenwirkungen nicht sequenziert, sofern nicht ausdrücklich angegeben. Im Beispielcode haben der Zuweisungsoperator (=) und der Postfix-Inkrementoperator ( ) beide Nebenwirkungen, die bei falscher Reihenfolge zu undefiniertem Verhalten führen können.

In C 17 wurde ein neuer Satz zu [ hinzugefügt N4659 expr.ass], der die Reihenfolgeregeln für den Zuweisungsoperator verdeutlicht:

The right operand is sequenced before the left operand.
Nach dem Login kopieren

Diese zusätzliche Anweisung stellt sicher, dass alle Nebenwirkungen innerhalb des rechten Operanden vor allen Nebenwirkungen innerhalb des linken Operanden ausgeführt werden, einschließlich der Zuweisung selbst.

Im Fall von „i = i 1;“ besteht der rechte Operand (i 1) aus dem Postfix-Inkrementoperator (i ) und der Konstante 1. Dafür sorgen die in C 17 eingeführten Sequenzierungsgarantien Die Postfix-Inkrementierung wird durchgeführt und ihr Nebeneffekt tritt auf, bevor die Zuweisung ausgeführt wird. Dadurch wird das undefinierte Verhalten beseitigt, das in C 11 vorhanden war.

Daher haben die erweiterten Sequenzierungsgarantien in C 17 „i = i 1;“ ergeben. legal, indem sichergestellt wird, dass die Nebenwirkungen der rechten und linken Operanden korrekt sequenziert sind, wodurch undefiniertes Verhalten verhindert wird.

Das obige ist der detaillierte Inhalt vonWarum wurde „i = i 1;' in C 17 zu einer legitimen Operation?. 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