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

Bagaimanakah Saya Boleh Memulihkan Keadaan Asal std::cout Selepas Memanipulasi Bendera Pemformatannya?

Barbara Streisand
Barbara Streisandasal
2024-12-07 00:49:13307semak imbas

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

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!

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