Maison > développement back-end > C++ > Comment puis-je restaurer l'état d'origine de std::cout après avoir manipulé ses indicateurs de formatage ?

Comment puis-je restaurer l'état d'origine de std::cout après avoir manipulé ses indicateurs de formatage ?

Barbara Streisand
Libérer: 2024-12-07 00:49:13
original
306 Les gens l'ont consulté

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

Restauration de l'état std::cout après manipulation

En C, modification de l'état des flux d'E/S, tels que std::cout , peut avoir des conséquences inattendues sur les opérations ultérieures. Considérez l'extrait de code suivant :

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..
}
Copier après la connexion

Dans cet exemple, std::cout est modifié par la fonction printHex pour imprimer en hexadécimal. Cependant, cette modification persiste lors du retour à main, provoquant l'impression de la sortie ultérieure utilisant std::cout en hexadécimal au lieu de décimal.

Pour résoudre ce problème, nous devons restaurer l'état d'origine de std::cout une fois la fonction printHex terminée. Ceci peut être réalisé en utilisant la fonction membre flags de 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
}
Copier après la connexion

En capturant les drapeaux actuels à l'aide de std::cout.flags() avant de le modifier, nous pouvons les restaurer en utilisant std:: cout.flags(f) pour réinitialiser l'état du flux à son format d'origine.

Cette technique permet de modifier temporairement les propriétés du flux d'E/S, garantissant que les flux ultérieurs Les opérations d'E/S sont effectuées comme prévu.

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

source:php.cn
Déclaration de ce site Web
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn
Derniers articles par auteur
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal