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

Bagaimanakah Saya Boleh Memulihkan Keadaan Asal std::cout Selepas Mengubah Suai Pemformatannya?

DDD
DDDasal
2024-12-04 05:56:17989semak imbas

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

Memulihkan Keadaan std::cout Selepas Manipulasi

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!

Kenyataan:
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