ホームページ >バックエンド開発 >C++ >フォーマットを変更した後に std::cout を元の状態に戻すにはどうすればよいですか?

フォーマットを変更した後に std::cout を元の状態に戻すにはどうすればよいですか?

DDD
DDDオリジナル
2024-12-04 05:56:17989ブラウズ

How Can I Restore the Original State of std::cout After Modifying Its Formatting?

操作後の 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 進形式で出力するように変更されました。これにより、メイン関数での後続の std::cout 呼び出しも 16 進数で出力され、予期しない動作が発生する可能性があります。

std::cout の元の状態を復元するには、ストリーム フラグを使用できます。

#include <iostream>

int main() {
    std::ios_base::fmtflags f(cout.flags());

    printHex(std::cout);

    cout.flags(f); // Restore original flags

    std::cout << 73; // prints 73 in decimal
}

この例では、fmtflags オブジェクト f に std::cout の元のストリーム フラグが格納されます。 printHex() を呼び出した後、cout.flags(f) を使用してストリーム フラグを明示的に f の値に戻します。これにより、std::cout の状態が元の設定に確実に復元されます。

ストリーム フラグを利用して適切に復元することで、書式設定動作の制御を維持しながらストリームを操作でき、数値形式が正しくなくなるなどの予期せぬ結果を回避できます。この場合。

以上がフォーマットを変更した後に std::cout を元の状態に戻すにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。