Stringstream のクリア
次のコードは、parser という名前の stringstream オブジェクトをクリアしようとします。
<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>
ただし、このアプローチは期待どおりに機能しません。その理由を説明しましょう。
問題:
問題は、文字列ストリームがファイルの終わり (eof) と失敗フラグを処理する方法にあります。最初の抽出 (>> top) が文字列の終わりに達すると、eof ビットが設定されます。 eof ビットが設定されたままであるため、ストリームに対する後続の操作は失敗します。
解決策:
文字列ストリームを正しくクリアするには、基礎となるシーケンスと失敗フラグと eof フラグの両方が必要です。リセットされる。次のコードはこれを実行します。
<code class="cpp">parser.str(std::string()); parser.clear();</code>
str() メソッドは基になるシーケンスを空の文字列に設定し、clear() メソッドはfail フラグと eof フラグをクリアします。
これらを使用すると、変更すると、コードは値 6 をパーサー ストリームに正しく読み取り、それを一番下の変数に格納します。
以上が`str(\"\")` で文字列ストリームをリセットしてもクリアされないのはなぜですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。