Memulihkan Keadaan std::cout selepas Pengubahsuaian
Dalam C , memanipulasi aliran input/output boleh mengubah keadaannya buat sementara waktu. Sebagai contoh, coretan kod di bawah mengubah suai asas std::cout kepada perenambelasan:
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.. }
Selepas kembali daripada printHex, output seterusnya kepada std::cout akan terus menggunakan asas perenambelasan, yang berpotensi membawa kepada hasil yang tidak dijangka. Untuk menangani perkara ini, kita memerlukan cara untuk memulihkan keadaan asal std::cout.
Penyelesaian
Penyelesaian melibatkan penggunaan std::ios_base::fmtflags kelas untuk menangkap dan memulihkan bendera pemformatan strim. Begini cara untuk melakukannya:
Pada permulaan fungsi yang mengubah suai std::cout:
std::ios_base::fmtflags f( cout.flags() );
Ini menyimpan bendera pemformatan semasa dalam pembolehubah f.
Pada penghujung fungsi, selepas mengembalikan strim kepada keadaan asalnya:
cout.flags( f );
Ini memulihkan bendera pemformatan yang telah ditangkap pada mulanya daripada fungsi.
Contoh
Dalam coretan kod di bawah, fungsi restoreCoutState menangkap dan memulihkan keadaan 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 }
Atas ialah kandungan terperinci Bagaimanakah Saya Boleh Memulihkan Keadaan Asal std::cout Selepas Mengubah Suai Bendera Pemformatannya?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!