首頁 > 後端開發 > C++ > 在操作 std::cout 的格式化標誌後,如何恢復原始狀態?

在操作 std::cout 的格式化標誌後,如何恢復原始狀態?

Barbara Streisand
發布: 2024-12-07 00:49:13
原創
307 人瀏覽過

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

操作後恢復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中文網其他相關文章!

來源:php.cn
本網站聲明
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn
作者最新文章
熱門教學
更多>
最新下載
更多>
網站特效
網站源碼
網站素材
前端模板