Rumah > pembangunan bahagian belakang > C++ > Bagaimanakah Saya Boleh Memulihkan Keadaan Asal std::cout Selepas Memanipulasi Bendera Pemformatannya?

Bagaimanakah Saya Boleh Memulihkan Keadaan Asal std::cout Selepas Memanipulasi Bendera Pemformatannya?

Barbara Streisand
Lepaskan: 2024-12-07 00:49:13
asal
397 orang telah melayarinya

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

Memulihkan std::cout Keadaan Selepas Manipulasi

Dalam C , mengubah suai keadaan aliran I/O, seperti std::cout , boleh mendatangkan akibat yang tidak diingini dalam operasi seterusnya. Pertimbangkan coretan 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

Dalam contoh ini, std::cout diubah suai oleh fungsi printHex untuk mencetak dalam perenambelasan. Walau bagaimanapun, pengubahsuaian ini berterusan apabila kembali ke utama, menyebabkan output berikutnya menggunakan std::cout dicetak dalam perenambelasan dan bukannya perpuluhan.

Untuk menangani isu ini, kita perlu memulihkan keadaan asal std::cout selepas fungsi printHex selesai. Ini boleh dicapai menggunakan fungsi ahli bendera std::ios_base.

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

Dengan menangkap bendera semasa menggunakan std::cout.flags() sebelum mengubah suainya, kami boleh memulihkannya menggunakan std:: cout.flags(f) untuk menetapkan semula keadaan strim kepada format asalnya.

Teknik ini membenarkan untuk sementara pengubahsuaian pada sifat aliran I/O, memastikan operasi I/O berikutnya dilakukan seperti yang diharapkan.

Atas ialah kandungan terperinci Bagaimanakah Saya Boleh Memulihkan Keadaan Asal std::cout Selepas Memanipulasi Bendera Pemformatannya?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

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