すでに色々試しましたが、
std::stringstream m;
m.empty();
m.clear();
どちらも機能しません。
すべての標準ライブラリ タイプのメンバ関数empty()
は、コマンドではなくクエリです。つまり、「空ですか?」という意味です。「中身を捨ててください」ではありません。
clear()
メンバー関数は から継承され、ストリームのエラー状態をクリアするために使用されます。ios
たとえば、ファイル ストリームのエラー状態がeofbit
(ファイルの終わり) に設定されている場合、呼び出しclear()
によってエラー状態がgoodbit
(エラーなし)に戻されます。 .
の内容をクリアするにはstringstream
、次を使用します。
m.str("");
次を使用していますが、正しいです:
m.str(std::string());
std::string
を受け取るコンストラクターの呼び出しを避けるため、技術的にはより効率的ですconst char*
。しかし、最近のコンパイラはどちらの場合でも同じコードを生成できるはずなので、より読みやすいものを使用します。
m.str("");
動作するようです。
これは、コンパイラに関係なく、最も信頼できる方法です。
m=std::stringstream();
概念的な問題です。
Stringstream はストリームであるため、そのイテレータは転送され、戻ることはできません。出力文字列ストリームでは、他の出力ストリームと同様に、再初期化するために flush() が必要です。
これらは、gnu c++ の文字列ストリームのデータを破棄しません
m.str("");
m.str() = "";
m.str(std::string());
以下は、私のために文字列ストリームを空にします:
m.str().clear();