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

Warum ist die Ausgabe von „cout

Linda Hamilton
Linda HamiltonOriginal
2024-12-12 15:10:19774Durchsuche

Why is the Output of `cout

Undefinierte Ausgabe von cout << a << a

Im Codeausschnitt:

int a = 0;
cout << a++ << a;

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

cout << (a++) << a;

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);

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

wird bewertet als:

std::operator<<<>(std::operator<<<>(E1, E2), E3)

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!

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