Heim > Backend-Entwicklung > C++ > Wie kann ich den ursprünglichen Zustand von std::cout wiederherstellen, nachdem ich seine Formatierung geändert habe?

Wie kann ich den ursprünglichen Zustand von std::cout wiederherstellen, nachdem ich seine Formatierung geändert habe?

DDD
Freigeben: 2024-12-04 05:56:17
Original
1031 Leute haben es durchsucht

How Can I Restore the Original State of std::cout After Modifying Its Formatting?

Wiederherstellen des Status von std::cout nach Manipulation

In C können Streams wie std::cout manipuliert werden, um ihre Formatierung und ihr Verhalten zu ändern. Nach solchen Manipulationen kann es jedoch erforderlich sein, den ursprünglichen Zustand des Streams wiederherzustellen.

Angenommen, Sie haben 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..
}
Nach dem Login kopieren

Nach dem Aufruf von printHex() wird der Status von std::cout angezeigt wurde geändert, um Ganzzahlen im Hexadezimalformat auszugeben. Dies führt dazu, dass ein nachfolgender Aufruf von std::cout in der Hauptfunktion ebenfalls in Hex ausgegeben wird, was möglicherweise zu unerwartetem Verhalten führt.

Um den ursprünglichen Zustand von std::cout wiederherzustellen, können wir Stream-Flags verwenden:

#include <iostream>

int main() {
    std::ios_base::fmtflags f(cout.flags());

    printHex(std::cout);

    cout.flags(f); // Restore original flags

    std::cout << 73; // prints 73 in decimal
}
Nach dem Login kopieren

In diesem Beispiel speichert das fmtflags-Objekt f die ursprünglichen Stream-Flags von std::cout. Nach dem Aufruf von printHex() setzen wir die Stream-Flags mithilfe von cout.flags(f) explizit auf den Wert von f zurück. Dadurch wird sichergestellt, dass der Status von std::cout auf seine ursprünglichen Einstellungen zurückgesetzt wird.

Durch die Verwendung von Stream-Flags und deren entsprechende Wiederherstellung können wir Streams manipulieren und gleichzeitig die Kontrolle über ihr Formatierungsverhalten behalten, um unbeabsichtigte Folgen wie falsche Zahlenformate in zu vermeiden in diesem Fall.

Das obige ist der detaillierte Inhalt vonWie kann ich den ursprünglichen Zustand von std::cout wiederherstellen, nachdem ich seine Formatierung geändert habe?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Quelle:php.cn
Erklärung dieser Website
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage