Cout und wcout mischen
Wie Sie im „C Cookbook“ lesen, kann der folgende Code zu einem Fehler führen:
cout << s << std::endl; // You shouldn't be able to wcout << ws << std::endl; // run these at the same time
Dies ist auf das Konzept der „Stromorientierung“ zurückzuführen. Nachdem ein Stream erstellt wurde, aber bevor irgendwelche Operationen daran ausgeführt werden, ist er ohne Ausrichtung. Sobald jedoch eine Eingabe-/Ausgabefunktion für Breitzeichen (wie wcout) darauf angewendet wird, wird er zu einem Stream mit breiter Ausrichtung, und sobald eine Eingabe-/Ausgabefunktion für Bytes (wie cout) darauf angewendet wird, wird er zu einem Byte-Stream. orientierter Stream.
Der C-Standard legt fest, dass „Byte-Eingabe-/Ausgabefunktionen nicht auf einen breitorientierten Stream angewendet werden dürfen und Eingabe-/Ausgabefunktionen für breite Zeichen nicht auf einen byteorientierten Stream angewendet werden dürfen.“ (C-Standard [7.19.2]).
Im Fall des von Ihnen bereitgestellten Codes legt cout stdout als byteorientierten Stream fest. Daher sollte wcout laut Standard nicht auf stdout verwendet werden. In der Praxis erlauben einige Compiler und Umgebungen jedoch möglicherweise das Mischen von Breitzeichen- und byteorientierten Ausgabefunktionen im selben Stream. Dieses Verhalten kann von der Compilerversion und Plattform abhängen.
Das obige ist der detaillierte Inhalt vonKönnen Sie „cout' und „wcout' ohne Fehler mischen?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!