操作後の std::cout 状態の復元
C で、 std::cout などの I/O ストリームの状態を変更する、その後の操作で意図しない結果が生じる可能性があります。次のコード スニペットを考えてみましょう:
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.. }
この例では、std::cout が printHex 関数によって変更され、16 進数で出力されます。ただし、この変更は main に戻っても持続し、std::cout を使用した後続の出力が 10 進数ではなく 16 進数で表示されます。
この問題に対処するには、std::cout の元の状態に戻す必要があります。 printHex 関数が終了した後。これは、std::ios_base の flags メンバー関数を使用して実現できます。
#include <ios> #include <iostream> int main(){ std::ios_base::fmtflags f( std::cout.flags() ); std::cout << 100; // prints 100 base 10 printHex(std::cout); //prints 123 in hex std::cout.flags( f ); std::cout << 73; //prints 73 base 10 }
変更する前に std::cout.flags() を使用して現在のフラグをキャプチャすると、std:: を使用してそれらを復元できます。 cout.flags(f) を使用して、ストリームの状態を元の形式にリセットします。
この手法により、I/O ストリームを一時的に変更できます。プロパティを設定し、後続の I/O 操作が期待どおりに実行されるようにします。
以上がフォーマットフラグを操作した後に std::cout を元の状態に戻すにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。