Restauration de l'état de std::cout après modification
En C , la manipulation des flux d'entrée/sortie peut temporairement modifier leur état. Par exemple, l'extrait de code ci-dessous modifie la base de std::cout en hexadécimal :
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 le retour de printHex, la sortie ultérieure vers std::cout continuera à utiliser la base hexadécimale, ce qui pourrait conduire à des résultats inattendus. Pour résoudre ce problème, nous avons besoin d'un moyen de restaurer l'état d'origine de std::cout.
Solution
La solution implique l'utilisation de std::ios_base::fmtflags classe pour capturer et restaurer les indicateurs de formatage du flux. Voici comment procéder :
Au début de la fonction qui modifie std::cout:
std::ios_base::fmtflags f( cout.flags() );
Ceci stocke les indicateurs de formatage actuels dans la variable f.
À la fin de la fonction, après avoir remis le flux à son état d'origine :
cout.flags( f );
Cela restaure les drapeaux de formatage qui ont été capturés au début de la fonction.
Exemple
Dans l'extrait de code ci-dessous, la fonction restaurerCoutState capture et restaure l'état de std::cout:
void restoreCoutState(std::ostream& os){ std::ios_base::fmtflags f( os.flags() ); os << std::hex << 123; os.flags( f ); } int main(){ std::cout << 100; // prints 100 base 10 restoreCoutState(std::cout); // prints 123 in hex std::cout << 73; // prints 73 base 10 }
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!