如何在操作std::cout 後恢復其狀態
在C 中,操作std::cout 等輸出流的狀態: :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 的狀態改變為十六進位輸出。因此,後續的列印操作也會以十六進位列印,即使程式設計師可能不希望這種行為。
要解決此問題,可以利用以下技術:
#include <iostream> std::ios_base::fmtflags f( cout.flags() ); // Your code here... cout.flags( f );
透過在執行任何操作之前,將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中文網其他相關文章!