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.. }
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 }
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!