Heim  >  Artikel  >  Backend-Entwicklung  >  Wie wertet C die rechten und linken Operanden in Zuweisungsanweisungen aus?

Wie wertet C die rechten und linken Operanden in Zuweisungsanweisungen aus?

DDD
DDDOriginal
2024-10-29 18:28:45600Durchsuche

 How Does C   Evaluate the Right and Left Operands in Assignment Statements?

Reihenfolge der Auswertung in Zuweisungsanweisungen in C

Beim Zuweisen eines Werts zu einem Kartenelement, z. B. mp[10] = mp. size() wird die Auswertungsreihenfolge des Ausdrucks entscheidend. Dieser spezielle Ausdruck liefert ein unerwartetes Ergebnis von „0 1“, was Fragen zur angegebenen Auswertungsreihenfolge in C aufwirft.

Der C-Standard legt fest, dass die Auswertungsreihenfolge für bestimmte Operationen, wie z. B. Funktionsaufrufe, nicht spezifiziert ist. Allerdings werden Zuweisungsoperatoren wie = nach der Auswertung des rechten und linken Operanden sequenziert, sodass eine Lücke in der angegebenen Reihenfolge entsteht. Diese Unklarheit hat dazu geführt, dass ein verfeinerter Vorschlag erforderlich ist.

Der jüngste C-Standardvorschlag (N4228) versucht, dieses Problem zu lösen, indem die Bewertungsreihenfolge für bestimmte Fälle festgelegt wird. Laut N4228 fällt dieser spezifische Zuweisungsausdruck in die Kategorie des nicht spezifizierten Verhaltens, bei dem beide Operandenauswertungen nicht sequenziert sind.

Gemäß der überarbeiteten Version von N4228 (P0145R0) ist dieses Verhalten jetzt spezifiziert. Der überarbeitete Abschnitt [expr.ass] besagt, dass der rechte Operand eines Zuweisungsoperators vor dem linken Operanden sequenziert wird. Daher würde im gegebenen Ausdruck zuerst mp.size() ausgewertet werden, gefolgt von der Zuweisung des Ergebnisses an mp[10]. Es wird erwartet, dass der aktualisierte C 17-Standard diese Bewertungsreihenfolge klarstellt.

Zusammenfassend lässt sich sagen, dass die Bewertungsreihenfolge von Zuweisungsanweisungen in bestimmten Fällen noch nicht spezifiziert ist, aber der neueste C-Standardvorschlag (N4228) zielt darauf ab, diese Regeln zu verfeinern. Die aktuell akzeptierte Spezifikation P0145R3 stellt klar, dass der rechte Operand einer Zuweisung vor dem linken Operanden ausgewertet wird, wodurch die Mehrdeutigkeit im angegebenen Ausdruck behoben wird.

Das obige ist der detaillierte Inhalt vonWie wertet C die rechten und linken Operanden in Zuweisungsanweisungen aus?. 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