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

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

Mary-Kate Olsen
Mary-Kate OlsenOriginal
2024-12-02 15:11:13638Durchsuche

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

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:

  1. Fügen Sie oder .
  2. 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.

  3. Führen Sie die erforderlichen Änderungen an std::cout durch.
  4. 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.

  5. 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!

Stellungnahme:
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