Rumah >pembangunan bahagian belakang >C++ >Bagaimanakah Saya Boleh Memulihkan Keadaan Asal `std::cout` Selepas Fungsi Mengubah Suai Bendera Pemformatannya?
Soalan:
Dalam senario di mana fungsi, mari kita panggil printHex, ubah suai keadaan std::cout (cth., pangkalan, lebar medan, dll.), bagaimanakah kita boleh memulihkan keadaan asal selepas pemanggilan fungsi? Isu ini timbul apabila output berikutnya menggunakan std::cout menjadi rosak oleh perubahan keadaan yang dibuat dalam printHex.
Jawapan:
Untuk mendapatkan semula kawalan ke atas std::cout dan kembalikannya kepada tetapan asalnya, kami boleh menggunakan keupayaan
Sebagai alternatif, kami boleh melaksanakan proses pemulihan menggunakan Pemerolehan Sumber Adalah Permulaan (RAII) simpulan bahasa untuk menguruskan bendera secara automatik. Berikut ialah contoh:
class RestoreCoutFlags { public: RestoreCoutFlags(std::ostream& stream) : _savedFlags(stream.flags()) {} ~RestoreCoutFlags() { stream.flags(_savedFlags); } operator std::streambuf*() const { return stream.rdbuf(); } private: std::ios_base::fmtflags _savedFlags; };
Dengan kelas ini, pemulihan boleh dicapai seperti berikut:
{ RestoreCoutFlags r(std::cout); // Code that modifies std::cout flags } // When the block exits, r is automatically destroyed, restoring the flags.
Atas ialah kandungan terperinci Bagaimanakah Saya Boleh Memulihkan Keadaan Asal `std::cout` Selepas Fungsi Mengubah Suai Bendera Pemformatannya?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!