文字列ストリーム変数をクリアするにはどうすればいいですか? 質問する

文字列ストリーム変数をクリアするにはどうすればいいですか? 質問する

すでにいくつか試してみましたが、

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

どちらも機能しません。

ベストアンサー1

すべての標準ライブラリ型では、メンバー関数はempty()コマンドではなくクエリです。つまり、「内容を捨ててください」ではなく「空ですか?」を意味します。

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

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

m.str("");

正しいですが、次の例を使用します。

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

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

おすすめ記事