Effacer un flux de chaînes
Le code suivant tente d'effacer un objet stringstream nommé parser :
<code class="cpp">stringstream parser; parser << 5; short top = 0; parser >> top; parser.str(""); // HERE I'M RESETTING parser parser << 6; // DOESN'T PUT 6 INTO parser short bottom = 0; parser >> bottom;</code>
Cependant, cette approche ne fonctionne pas comme prévu. Expliquons pourquoi.
Problème :
Le problème réside dans la façon dont les flux de chaînes gèrent les indicateurs de fin de fichier (eof) et d'échec. Lorsque la première extraction (>> top) atteint la fin de la chaîne, elle définit le bit eof. Les opérations ultérieures sur le flux échouent car le bit eof reste défini.
Solution :
Pour effacer correctement un flux de chaînes, la séquence sous-jacente et les indicateurs d'échec et eof doivent être réinitialisé. Le code suivant fait ceci :
<code class="cpp">parser.str(std::string()); parser.clear();</code>
La méthode str() définit la séquence sous-jacente sur une chaîne vide, tandis que la méthode clear() efface les indicateurs fail et eof.
Avec ceux-ci change, le code lira correctement la valeur 6 dans le flux de l'analyseur et la stockera dans la variable du bas.
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!