Rumah > pembangunan bahagian belakang > C++ > Bagaimana untuk Tetapkan Semula `std::cout` kepada Keadaan Asalnya Selepas Memformat Perubahan?

Bagaimana untuk Tetapkan Semula `std::cout` kepada Keadaan Asalnya Selepas Memformat Perubahan?

DDD
Lepaskan: 2024-12-02 10:57:11
asal
903 orang telah melayarinya

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

Cara Memulihkan Keadaan std::cout Selepas Memanipulasinya

Dalam C , memanipulasi keadaan aliran keluaran seperti std: :cout membenarkan pilihan pemformatan serba boleh. Walau bagaimanapun, kadangkala ia menjadi perlu untuk memulihkan keadaan asal selepas melakukan perubahan ini.

Pertimbangkan kod berikut:

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..
}
Salin selepas log masuk

Di sini, selepas memanggil printHex, keadaan std::cout berubah kepada keluaran heksadesimal. Akibatnya, operasi cetakan seterusnya juga mencetak dalam perenambelasan, walaupun pengaturcara mungkin tidak menginginkan kelakuan ini.

Untuk menangani isu ini, seseorang boleh menggunakan teknik berikut:

#include <iostream>

std::ios_base::fmtflags f( cout.flags() );

// Your code here...

cout.flags( f );
Salin selepas log masuk

Oleh menyimpan bendera semasa (pilihan pemformatan) std::cout dalam pembolehubah f sebelum melakukan sebarang manipulasi, seseorang boleh memulihkan keadaan asal dengan menetapkan bendera kembali ke f selepas perubahan yang diingini.

Sebagai alternatif, untuk kod yang lebih mudah dan berorientasikan objek, seseorang boleh menggunakan RAII (Pemerolehan Sumber Adalah Permulaan) seperti berikut:

#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)
}
Salin selepas log masuk

Atas ialah kandungan terperinci Bagaimana untuk Tetapkan Semula `std::cout` kepada Keadaan Asalnya Selepas Memformat Perubahan?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

sumber:php.cn
Kenyataan Laman Web ini
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn
Tutorial Popular
Lagi>
Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan