操作後恢復std::cout 狀態
在C 中,修改I/O 流的狀態,例如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.. }
在此範例中,std::cout 被 printHex 函數修改為以十六進位列印。然而,這種修改在傳回 main 時仍然存在,導致後續使用 std::cout 的輸出以十六進位而不是十進位列印。
為了解決這個問題,我們需要恢復 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中文網其他相關文章!