修改後恢復 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 將繼續使用十六進位基數,可能導致意想不到的結果。為了解決這個問題,我們需要一個方法來恢復 std::cout 的原始狀態。
解決方案
解決方案涉及使用 std::ios_base::fmtflags類別來捕獲和恢復流的格式標誌。操作方法如下:
在修改 std::cout 的函數的開頭:
std::ios_base::fmtflags f( cout.flags() );
這會將目前格式標誌儲存在 f 變數中。
在函數結束時,將流返回到其原始狀態後:
cout.flags( f );
這將恢復在開始時捕獲的格式標誌的function.
範例
在下面的程式碼片段中,restoreCoutState函數捕獲並恢復 std::cout:
的狀態void restoreCoutState(std::ostream& os){ std::ios_base::fmtflags f( os.flags() ); os << std::hex << 123; os.flags( f ); } int main(){ std::cout << 100; // prints 100 base 10 restoreCoutState(std::cout); // prints 123 in hex std::cout << 73; // prints 73 base 10 }
以上是修改格式化標誌後如何恢復 std::cout 的原始狀態?的詳細內容。更多資訊請關注PHP中文網其他相關文章!