Heim >Backend-Entwicklung >C++ >Warum ist `cout
Undefiniertes Verhalten: Cout verstehen << a << a
In C ist es unbedingt erforderlich, das Konzept des undefinierten Verhaltens zu verstehen. Undefiniertes Verhalten bezieht sich auf Situationen, in denen das Verhalten des Programms nicht durch den C-Standard spezifiziert ist, was zu unvorhersehbaren Ergebnissen führt.
Bedenken Sie die folgende Aussage:
cout << a++ << a;
Hier haben wir eine Sequenz von Operationen mit dem Inkrementoperator ( ) und dem Einfügungsoperator (<<). Wenn wir diese Operationen auf die Variable a anwenden, stoßen wir aufgrund des Fehlens von Sequenzpunkten auf undefiniertes Verhalten.
Sequenzpunkte sind bestimmte Punkte im Code, an denen der Compiler garantiert, dass alle Nebenwirkungen aufgetreten sind. In der obigen Aussage gibt es jedoch keinen Sequenzpunkt zwischen der Auswertung von a und a. Dies bedeutet, dass die Reihenfolge, in der diese Vorgänge ausgeführt werden, nicht im Standard festgelegt ist.
Daher kann die Ausgabe dieser Anweisung je nach Implementierung variieren. In bestimmten Fällen könnte die Ausgabe „01“ sein, während sie in anderen Fällen „10“ sein könnte. Der Standard garantiert jedoch nicht, welcher Fall auftritt, sodass das Verhalten undefiniert ist.
C 17-Update
Es ist wichtig zu beachten, dass die Regeln für die Ausdrucksauswertung in C wurden in C 17 aktualisiert. In C 17 gilt die folgende Regel für Verschiebungsoperatorausdrücke wie << und >>:
"In einem Verschiebungsoperatorausdruck E1<
Diese Regel beseitigt das undefinierte Verhalten in der ursprünglichen Anweisung. In C 17 ist die Anweisung cout << a << A; wird immer die Ausgabe „01“ erzeugen, da die Nebenwirkungen von a (Erhöhen von a) garantiert vor der Auswertung von a auftreten.
Das obige ist der detaillierte Inhalt vonWarum ist `cout. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!