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