Heim >Backend-Entwicklung >C++ >Wie setze ich „std::cout' nach Formatierungsänderungen auf seinen ursprünglichen Zustand zurück?
So stellen Sie den Status von std::cout nach der Manipulation wieder her
In C wird der Status von Ausgabestreams wie std manipuliert: :cout ermöglicht vielseitige Formatierungsoptionen. Manchmal ist es jedoch erforderlich, nach der Durchführung dieser Änderungen den ursprünglichen Zustand wiederherzustellen.
Bedenken Sie den folgenden Code:
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.. }
Hier ändert sich nach dem Aufruf von printHex der Status von std::cout zur hexadezimalen Ausgabe. Infolgedessen werden nachfolgende Druckvorgänge auch im Hexadezimalformat gedruckt, auch wenn der Programmierer dieses Verhalten möglicherweise nicht wünscht.
Um dieses Problem zu beheben, kann man die folgende Technik verwenden:
#include <iostream> std::ios_base::fmtflags f( cout.flags() ); // Your code here... cout.flags( f );
Von Wenn man die aktuellen Flags (Formatierungsoptionen) von std::cout in der Variablen f speichert, bevor man irgendwelche Manipulationen durchführt, kann man den ursprünglichen Zustand wiederherstellen, indem man die Flags nach dem gewünschten wieder auf f setzt Änderungen.
Alternativ kann man für bequemeren und objektorientierteren Code RAII (Resource Acquisition Is Initialization) wie folgt verwenden:
#include <iostream> struct FlagsSaver { FlagsSaver() : flags( cout.flags() ) {} ~FlagsSaver() { cout.flags( flags ); } private: std::ios_base::fmtflags flags; }; void printHex(std::ostream& x) { FlagsSaver saver; // RAII to restore flags x << std::hex << 123; } int main() { std::cout << 100; // prints 100 base 10 printHex(std::cout); //prints 123 in hex std::cout << 73; // prints 73 base 10 (original flags restored) }
Das obige ist der detaillierte Inhalt vonWie setze ich „std::cout' nach Formatierungsänderungen auf seinen ursprünglichen Zustand zurück?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!