Bewertungsreihenfolge in C-Zuweisungsanweisungen
Beim Zuweisen eines Werts zu einer Karte in C kann die Bewertungsreihenfolge zu kontraintuitiven Ergebnissen führen. Betrachten Sie den folgenden Code:
map<int, int> mp;<br>printf("%d ", mp.size());<br>mp[10]=mp.size();<br>printf("%dn", mp[10]);<br>
Dieser Code gibt 0 und dann 1 aus, während man 0 und 0 erwarten könnte. Dies liegt daran:
Nicht spezifiziertes Verhalten
Dieses besondere Verhalten ist im C-Standard nicht spezifiziert. Ein aktueller Vorschlag (N4228) versucht jedoch, die Reihenfolge der Auswertung in solchen Fällen zu klären.
Abschnitt [expr.ass]p1 des überarbeiteten Vorschlags besagt:
"Der rechte Operand ist sequenziert vor dem linken Operanden.“
Das bedeutet, dass im obigen Beispiel mp.size() vor mp[10] ausgewertet würde, was zur erwarteten Ausgabe von 0 und 0 führt.
Update
Es ist wichtig zu beachten, dass dieses Verhalten in C 17 im Standard spezifiziert wurde, gemäß Revision 3 des Vorschlags p0145. Der rechte Operand wird jetzt in Zuweisungsanweisungen explizit vor dem linken Operanden eingeordnet.
Das obige ist der detaillierte Inhalt vonWarum führt die Zuweisung eines Kartenwerts in C zu unerwarteten Ergebnissen?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!