Heim > Backend-Entwicklung > C++ > Warum gibt dieser C-Code „ba' anstelle von „ab' aus?

Warum gibt dieser C-Code „ba' anstelle von „ab' aus?

Mary-Kate Olsen
Freigeben: 2024-12-31 16:01:10
Original
924 Leute haben es durchsucht

Why Does This C   Code Print

Enthüllung des Geheimnisses des Links-nach-rechts-Druckens in C

Das Verhalten des folgenden C-Codes ist rätselhaft:

Überraschenderweise wird „ba“ anstelle des erwarteten „ab“ auf der Konsole ausgegeben. Warum passiert das?

Um dieses Rätsel zu lösen, müssen wir die Natur der überlasteten << Operator. In C ist das << Der Operator akzeptiert eine beliebige Anzahl von Argumenten und gibt einen Verweis auf ein Ostream-Objekt zurück. In diesem Fall ist cout das ostream-Objekt.

Die Auswertungsreihenfolge der Argumente für << wird durch den C-Standard nicht garantiert. Dies bedeutet, dass es dem Compiler freisteht, die Argumente in beliebiger Reihenfolge auszuwerten, einschließlich der möglichen Auswertung außerhalb der Reihenfolge.

In unserem Beispiel wird der Code zu einem Ausdruck der Form kompiliert:

Der Compiler fügt Klammern um jeden Aufruf aus der Warteschlange und um das Ergebnis des rekursiven Aufrufs ein. Das Ergebnis des zweiten Aufrufs aus der Warteschlange wird dann in die Klammern rund um den ersten eingefügt.

Der Schlüssel zum Verständnis des Verhaltens besteht darin, zu erkennen, dass die Argumente für << Operator werden in der Reihenfolge von rechts nach links ausgewertet. Daher entspricht das Folgende dem obigen Code:

In dieser Reihenfolge wird der zweite Aufruf aus der Warteschlange zuerst ausgewertet, was zu „b“ führt. Das Ergebnis dieses Aufrufs wird dann an << übergeben. Operator, der eine Referenz auf cout zurückgibt. Der erste Aufruf aus der Warteschlange wird dann ausgewertet, was zu „a“ führt, das an die Referenz übergeben wird, die vom vorherigen << zurückgegeben wurde. Operator.

Dies erklärt, warum der Code „ba“ anstelle von „ab“ ausgibt. Das << Der Operator gibt zuerst „b“ und dann „a“ aus.

Um ein konsistentes Drucken von links nach rechts zu gewährleisten, sollten Klammern verwendet werden, um die Auswertungsreihenfolge wie folgt explizit zu steuern:

Das obige ist der detaillierte Inhalt vonWarum gibt dieser C-Code „ba' anstelle von „ab' aus?. 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