Heim > Backend-Entwicklung > C++ > Warum ist die Ausgabe von „cout

Warum ist die Ausgabe von „cout

Linda Hamilton
Freigeben: 2024-12-12 15:10:19
Original
678 Leute haben es durchsucht

Why is the Output of `cout

Undefinierte Ausgabe von cout << a << a

Im Codeausschnitt:

int a = 0;
cout << a++ << a;
Nach dem Login kopieren

wird allgemein angenommen, dass das Verhalten äquivalent ist zu:

cout << (a++) << a;
Nach dem Login kopieren

Allerdings aufgrund des Mangels Aufgrund der Anzahl von Sequenzpunkten zwischen Funktionsargumentauswertungen ist die Ausführungsreihenfolge nicht garantiert. Der Compiler kann ein Vorher oder Nachher std::operator<<<>(std::cout, a ) auswerten.

Daher lautet die korrekte Interpretation:

cout << ((a++) << a);
Nach dem Login kopieren

Das bedeutet, dass das Ergebnis undefiniert ist, da der Wert von a nach dem Inkrement im zweiten Aufruf von verwendet wird Operator<<<>.

C 17 Amendment

In C 17 wurden die Regeln wie folgt geändert:

E1 << E2
Nach dem Login kopieren

wird bewertet als:

std::operator<<<>(std::operator<<<>(E1, E2), E3)
Nach dem Login kopieren

wobei alle Nebenwirkungen von E1 vor denen von E2 sequenziert werden. Dadurch wird sichergestellt, dass das Codefragment nun die erwartete Ausgabe von „01“ erzeugt.

Das obige ist der detaillierte Inhalt vonWarum ist die Ausgabe von „cout. 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