操作後に std::cout の状態を復元する方法
C で、 std などの出力ストリームの状態を操作します。 :cout を使用すると、多彩な書式設定オプションが可能になります。ただし、これらの変更を実行した後、元の状態に戻す必要がある場合があります。
次のコードを考えてみましょう:
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 進数出力に変換します。その結果、プログラマがこの動作を望まない場合でも、後続の印刷操作も 16 進数で印刷されます。
この問題に対処するには、次の手法を利用できます。
#include <iostream> std::ios_base::fmtflags f( cout.flags() ); // Your code here... cout.flags( f );
By操作を実行する前に std::cout の現在のフラグ (フォーマット オプション) を変数 f に保存すると、必要な操作を行った後にフラグを f に戻すことで元の状態に戻すことができます。
また、より便利でオブジェクト指向のコードを作成するには、次のように RAII (リソース取得は初期化) を使用できます。
#include <iostream> struct FlagsSaver { FlagsSaver() : flags( cout.flags() ) {} ~FlagsSaver() { cout.flags( flags ); } private: std::ios_base::fmtflags flags; }; void printHex(std::ostream& x) { FlagsSaver saver; // RAII to restore flags x << std::hex << 123; } int main() { std::cout << 100; // prints 100 base 10 printHex(std::cout); //prints 123 in hex std::cout << 73; // prints 73 base 10 (original flags restored) }
以上がフォーマット変更後に「std::cout」を元の状態にリセットするにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。