変更後の std::cout の状態の復元
C では、入出力ストリームを操作すると、その状態が一時的に変更されることがあります。たとえば、以下のコード スニペットは std::cout の基数を 16 進数に変更します:
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.. }
printHex から戻った後、std::cout への後続の出力では引き続き 16 進数が使用され、潜在的に予想外の結果。これに対処するには、std::cout の元の状態を復元する方法が必要です。
解決策
解決策には、std::ios_base::fmtflags の使用が含まれます。ストリームの書式設定フラグをキャプチャして復元するクラス。その方法は次のとおりです。
std::cout を変更する関数の先頭:
std::ios_base::fmtflags f( cout.flags() );
これにより、現在の書式設定フラグが f 変数に保存されます。
ストリームを元の状態に戻した後の関数の終了時:
cout.flags( f );
これにより、最初にキャプチャされた書式設定フラグが復元されます。のfunction.
例
以下のコード スニペットでは、restoreCoutState 関数が 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 }
以上がフォーマットフラグを変更した後に std::cout を元の状態に戻すにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。