web-dev-qa-db-ja.com

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;

なぜ機能しないのですか?

通常、文字列ストリームを「リセット」するには、strを使用して基になるシーケンスを空の文字列にリセットし、clearを使用して失敗およびeofフラグをクリアする必要があります。

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

通常起こることは、最初の>>は文字列の最後に到達し、eofビットを設定しますが、最初のshortは正常に解析されます。ストリームのeofビットがまだ設定されているため、この後のストリームに対する操作はすぐに失敗します。

220
CB Bailey