Rumah >pembangunan bahagian belakang >C++ >Bagaimanakah Saya Boleh Memulihkan Keadaan Asal std::cout Selepas Mengubah Suai Pemformatannya?
Dalam C , strim seperti std::cout boleh dimanipulasi untuk mengubah pemformatan dan tingkah lakunya. Walau bagaimanapun, selepas manipulasi sedemikian, memulihkan keadaan asal strim mungkin diperlukan.
Andaikan anda mempunyai 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.. }
Selepas memanggil printHex(), keadaan std::cout telah diubah untuk mencetak integer dalam format heksadesimal. Ini menyebabkan panggilan seterusnya ke std::cout dalam fungsi utama turut mencetak dalam hex, yang berpotensi menyebabkan gelagat yang tidak dijangka.
Untuk memulihkan keadaan asal std::cout, kita boleh menggunakan bendera strim:
#include <iostream> int main() { std::ios_base::fmtflags f(cout.flags()); printHex(std::cout); cout.flags(f); // Restore original flags std::cout << 73; // prints 73 in decimal }
Dalam contoh ini, objek fmtflags f menyimpan bendera strim asal std::cout. Selepas memanggil printHex(), kami secara eksplisit menetapkan bendera strim kembali kepada nilai f menggunakan cout.flags(f). Ini memastikan keadaan std::cout dipulihkan kepada tetapan asalnya.
Dengan menggunakan bendera strim dan memulihkannya dengan sewajarnya, kami boleh memanipulasi strim sambil mengekalkan kawalan ke atas tingkah laku pemformatannya, mengelakkan akibat yang tidak diingini seperti format nombor yang salah dalam kes ini.
Atas ialah kandungan terperinci Bagaimanakah Saya Boleh Memulihkan Keadaan Asal std::cout Selepas Mengubah Suai Pemformatannya?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!