ホームページ >バックエンド開発 >C++ >`str(\'\')` で文字列ストリームをリセットしてもクリアされないのはなぜですか?

`str(\'\')` で文字列ストリームをリセットしてもクリアされないのはなぜですか?

DDD
DDDオリジナル
2024-11-04 03:04:30998ブラウズ

Why Doesn't Resetting a Stringstream with `str(

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 サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。