Heim > Artikel > Backend-Entwicklung > Wie wertet C die rechten und linken Operanden in Zuweisungsanweisungen aus?
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!