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

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

DDD
Libérer: 2024-12-04 05:56:17
original
1031 Les gens l'ont consulté

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

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

En C , les flux tels que std::cout peuvent être manipulés pour modifier leur formatage et leur comportement. Cependant, après de telles manipulations, la restauration de l'état d'origine du flux peut être nécessaire.

Supposons que vous ayez le 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

Après avoir appelé printHex(), l'état de std::cout a été modifié pour imprimer des entiers au format hexadécimal. Cela provoque un appel ultérieur à std::cout dans la fonction principale pour s'imprimer également en hexadécimal, provoquant potentiellement un comportement inattendu.

Pour restaurer l'état d'origine de std::cout, nous pouvons utiliser les indicateurs de flux :

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

Dans cet exemple, l'objet fmtflags f stocke les indicateurs de flux d'origine de std::cout. Après avoir appelé printHex(), nous redéfinissons explicitement les indicateurs de flux sur la valeur de f en utilisant cout.flags(f). Cela garantit que l'état de std::cout est restauré à ses paramètres d'origine.

En utilisant les indicateurs de flux et en les restaurant de manière appropriée, nous pouvons manipuler les flux tout en gardant le contrôle sur leur comportement de formatage, évitant ainsi des conséquences involontaires telles que des formats de nombres incorrects dans ce cas.

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
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal