554

すでに色々試しましたが、

std::stringstream m;
m.empty();
m.clear();

どちらも機能しません。

4

9 に答える 9

866

すべての標準ライブラリ タイプのメンバ関数empty()は、コマンドではなくクエリです。つまり、「空ですか?」という意味です。「中身を捨ててください」ではありません。

clear()メンバー関数は から継承され、ストリームのエラー状態をクリアするために使用されます。iosたとえば、ファイル ストリームのエラー状態がeofbit(ファイルの終わり) に設定されている場合、呼び出しclear()によってエラー状態がgoodbit(エラーなし)に戻されます。 .

の内容をクリアするにはstringstream、次を使用します。

m.str("");

次を使用していますが、正しいです:

m.str(std::string());

std::stringを受け取るコンストラクターの呼び出しを避けるため、技術的にはより効率的ですconst char*。しかし、最近のコンパイラはどちらの場合でも同じコードを生成できるはずなので、より読みやすいものを使用します。

于 2008-08-21T19:00:25.143 に答える
38
m.str("");

動作するようです。

于 2008-08-21T18:36:18.493 に答える
37

これは、コンパイラに関係なく、最も信頼できる方法です。

m=std::stringstream();
于 2012-10-11T16:00:12.300 に答える
-1

概念的な問題です。

Stringstream はストリームであるため、そのイテレータは転送され、戻ることはできません。出力文字列ストリームでは、他の出力ストリームと同様に、再初期化するために flush() が必要です。

于 2014-10-10T20:04:50.397 に答える
-14

これらは、gnu c++ の文字列ストリームのデータを破棄しません

    m.str("");
    m.str() = "";
    m.str(std::string());

以下は、私のために文字列ストリームを空にします:

    m.str().clear();
于 2012-09-06T22:58:41.527 に答える