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.. }
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 }
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!