Maison > développement back-end > C++ > le corps du texte

Pourquoi la réinitialisation d'un flux de chaînes avec `str(\'\')` ne l'efface-t-elle pas ?

DDD
Libérer: 2024-11-04 03:04:30
original
928 Les gens l'ont consulté

Why Doesn't Resetting a Stringstream with `str(

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

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

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!

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
À propos de nous Clause de non-responsabilité Sitemap
Site Web PHP chinois:Formation PHP en ligne sur le bien-être public,Aidez les apprenants PHP à grandir rapidement!