c++iostream

Restore the state of std::cout after manipulating it


Suppose I have a code like this:

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..
}

My question is if there is any way to 'restore' the state of cout to its original one after returning from the function? (Somewhat like std::boolalpha and std::noboolalpha..) ?

Thanks.


Solution

  • you need to #include <iostream> or #include <ios> then when required:

    std::ios_base::fmtflags f( cout.flags() );
    
    //Your code here...
    
    cout.flags( f );
    

    You can put these at the beginning and end of your function, or check out this answer on how to use this with RAII.