web-dev-qa-db-fra.com

Comment effacer le stringstream?

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;

Pourquoi ça ne marche pas?

Généralement, pour "réinitialiser" une chaîne de caractères, vous devez réinitialiser la séquence sous-jacente en une chaîne vide avec str et effacer tous les indicateurs d'échec et d'eof avec clear.

parser.str( std::string() );
parser.clear();

Généralement, il se passe que le premier >> atteint la fin de la chaîne et définit le bit eof, bien que le premier court-métrage soit analysé avec succès. Les opérations sur le flux après cette opération échouent immédiatement car le bit eof du flux est toujours activé.

220
CB Bailey