Heim >Backend-Entwicklung >C++ >Wie kann ich den ursprünglichen Zustand von std::cout wiederherstellen, nachdem ich seine Formatierungsflags manipuliert habe?
Std::cout-Status nach Manipulation wiederherstellen
In C den Status von E/A-Streams ändern, z. B. std::cout , kann unbeabsichtigte Folgen für spätere Operationen haben. Betrachten Sie den folgenden Codeausschnitt:
void printHex(std::ostream& x){ x << std::hex << 123; } int main(){ std::cout << 100; // prints 100 base 10 printHex(std::cout); //prints 123 in hex std::cout << 73; //problem! prints 73 in hex.. }
In diesem Beispiel wird std::cout durch die printHex-Funktion geändert, um hexadezimal zu drucken. Diese Änderung bleibt jedoch bestehen, wenn zur Hauptausgabe zurückgekehrt wird, was dazu führt, dass die nachfolgende Ausgabe mit std::cout hexadezimal statt dezimal ausgegeben wird.
Um dieses Problem zu beheben, müssen wir den ursprünglichen Zustand von std::cout wiederherstellen nachdem die printHex-Funktion beendet ist. Dies kann mit der Flags-Mitgliedsfunktion von std::ios_base erreicht werden.
#include <ios> #include <iostream> int main(){ std::ios_base::fmtflags f( std::cout.flags() ); std::cout << 100; // prints 100 base 10 printHex(std::cout); //prints 123 in hex std::cout.flags( f ); std::cout << 73; //prints 73 base 10 }
Indem wir die aktuellen Flags mit std::cout.flags() erfassen, bevor wir sie ändern, können wir sie mit std:: wiederherstellen. cout.flags(f), um den Status des Streams auf sein ursprüngliches Format zurückzusetzen.
Diese Technik ermöglicht temporäre Änderungen an den I/O-Stream-Eigenschaften und stellt so sicher Nachfolgende E/A-Vorgänge werden wie erwartet ausgeführt.
Das obige ist der detaillierte Inhalt vonWie kann ich den ursprünglichen Zustand von std::cout wiederherstellen, nachdem ich seine Formatierungsflags manipuliert habe?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!