Heim  >  Artikel  >  Backend-Entwicklung  >  Wie wirkt sich die Reihenfolge der Auswertung in C-Zuweisungsanweisungen auf die Ausgabe aus?

Wie wirkt sich die Reihenfolge der Auswertung in C-Zuweisungsanweisungen auf die Ausgabe aus?

Linda Hamilton
Linda HamiltonOriginal
2024-10-29 12:36:02140Durchsuche

How Does the Order of Evaluation in C   Assignment Statements Affect the Output?

Reihenfolge der Auswertung in Zuweisungsanweisungen in C

Im angegebenen Codeausschnitt:

map< int, int> mp;<br>printf("%d ", mp.size());<br>mp[10]=mp.size();<br>printf("%dn", mp[10]);<br>

Die scheinbar kontraintuitive Ausgabe von „0 1“ ergibt sich aus der nicht spezifizierten Reihenfolge der Auswertung von Unterausdrücken in Zuweisungen.

Gemäß dem C-Standard ist die Reihenfolge der Auswertung in Zuweisungsanweisungen undefiniert.Das Verhalten ist jedoch wie folgt:

  1. Die rechte Seite der Zuweisung (in diesem Fall mp.size()) wird zuerst ausgewertet.
  2. Die linke Seite der Zuweisung (mp[10]) wird geändert, um auf den zugrunde liegenden Wert zu verweisen Wert, der von der rechten Seite zurückgegeben wird.
  3. Die linke Seite wertet dann seinen Wert erneut aus, um ihn in der Zuweisung zu verwenden.

Daher wird im Codeausschnitt mp.size() ausgewertet auf 0 gesetzt und mp[10] zugewiesen. Dann wird mp[10] erneut ausgewertet, was nun den ihm zugewiesenen Wert zurückgibt (1).

Obwohl dieses Verhalten im aktuellen C-Standard nicht spezifiziert ist, wurde es in einem aktuellen Vorschlag behoben ( N4228):

N4228 schlägt vor, die Reihenfolge der Bewertungsregeln zu verfeinern, um sie für bestimmte Fälle, einschließlich des oben genannten, klar zu definieren. Gemäß dem Vorschlag wird der rechte Operand einer Zuweisung vor dem linken Operanden sequenziert.

Dies bedeutet, dass in C 17 und darüber hinaus das Verhalten des Codeausschnitts wahrscheinlich genau definiert sein wird und zu einem führt Ausgabe von „1 1.“

Das obige ist der detaillierte Inhalt vonWie wirkt sich die Reihenfolge der Auswertung in C-Zuweisungsanweisungen auf die Ausgabe 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