131
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;

うまくいかないのはなぜですか?

4

1 に答える 1

254

通常、文字列ストリームを「リセット」するには、基になるシーケンスをで空の文字列にリセットすることとstr、失敗フラグとeofフラグをでクリアすることの両方を行う必要がありますclear

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

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

于 2010-05-17T10:02:27.507 に答える