首頁 > 後端開發 > C++ > 格式變更後如何將 `std::cout` 重設為原始狀態?

格式變更後如何將 `std::cout` 重設為原始狀態?

DDD
發布: 2024-12-02 10:57:11
原創
954 人瀏覽過

How to Reset `std::cout` to its Original State After Formatting Changes?

如何在操作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中文網其他相關文章!

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