質問:
関数が次のようなシナリオで、これを printHex と呼びます。std::cout の状態を変更します (例:ベース、フィールド幅など)、関数呼び出し後に元の状態に戻すにはどうすればよいでしょうか?この問題は、std::cout を使用する後続の出力が printHex 内で行われた状態変更によって破損した場合に発生します。
回答:
std::cout と元の設定に戻すと、
あるいは、リソース取得は初期化を使用して復元プロセスを実装することもできます。 (RAII) フラグを自動的に管理するイディオム。以下に例を示します:
class RestoreCoutFlags { public: RestoreCoutFlags(std::ostream& stream) : _savedFlags(stream.flags()) {} ~RestoreCoutFlags() { stream.flags(_savedFlags); } operator std::streambuf*() const { return stream.rdbuf(); } private: std::ios_base::fmtflags _savedFlags; };
このクラスを使用すると、次のように復元を実現できます:
{ RestoreCoutFlags r(std::cout); // Code that modifies std::cout flags } // When the block exits, r is automatically destroyed, restoring the flags.
以上が関数が書式設定フラグを変更した後、「std::cout」の元の状態に戻すにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。