Wiederherstellen des Status von std::cout nach der Änderung
In C kann die Manipulation von Eingabe-/Ausgabeströmen ihren Status vorübergehend ändern. Der folgende Codeausschnitt ändert beispielsweise die Basis von std::cout in hexadezimal:
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.. }
Nach der Rückkehr von printHex verwendet die nachfolgende Ausgabe an std::cout weiterhin die hexadezimale Basis, was möglicherweise dazu führt unerwartete Ergebnisse. Um dies zu beheben, benötigen wir eine Möglichkeit, den ursprünglichen Zustand von std::cout wiederherzustellen.
Lösung
Die Lösung beinhaltet die Verwendung der std::ios_base::fmtflags Klasse zum Erfassen und Wiederherstellen der Formatierungsflags des Streams. So geht's:
Am Anfang der Funktion, die std::cout: ändert:
std::ios_base::fmtflags f( cout.flags() );
Hier werden die aktuellen Formatierungsflags in der f-Variablen gespeichert.
At am Ende der Funktion, nachdem der Stream in seinen ursprünglichen Zustand zurückversetzt wurde:
cout.flags( f );
Dadurch werden die Formatierungsflags wiederhergestellt, die zu Beginn der Funktion erfasst wurden.
Beispiel
Im folgenden Codeausschnitt erfasst die Funktion „restoreCoutState“ den Status von und stellt ihn wieder her std::cout:
void restoreCoutState(std::ostream& os){ std::ios_base::fmtflags f( os.flags() ); os << std::hex << 123; os.flags( f ); } int main(){ std::cout << 100; // prints 100 base 10 restoreCoutState(std::cout); // prints 123 in hex std::cout << 73; // prints 73 base 10 }
Das obige ist der detaillierte Inhalt vonWie kann ich den ursprünglichen Zustand von std::cout wiederherstellen, nachdem ich seine Formatierungsflags geändert habe?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!