6

重複の可能性:
ostringstream を再利用するには?

および値を文字列std::ostringstreamに変換するために使用してきましたが、インスタンスを再利用する方法が見つかりません。ここでの意味を説明するために、ストリームをクリアするために使用しようとした方法とともに、以下を示しますfloatint

 #include <iostream>
 #include <sstream>
 using namespace std;

 int main() {
   ostringstream stream;
   stream << "Test";
   cout << stream.str() << endl;  
   stream.flush();                
   stream << "----";
   cout << stream.str() << endl; 
   stream.clear();
   stream << "****";
   cout << stream.str() << endl;
   return 0;
 }

出力を生成する

 Test
 Test----
 Test----****

ostringstream無駄な多くのインスタンスを作成する必要があるため、これは私に問題を引き起こしています。明らかclear()に、flush()私が必要とすることをしないので、これを行う方法はありますか? http://www.cplusplus.com/reference/iostream/ostringstream/でドキュメントを確認しましたが、必要なことをしているように見えるものは何もありません。ストリームをリセットまたはクリアする方法はありますか??

4

2 に答える 2

18

stream.str("");基になる文字列を空の文字列にするために使用します。さらに良いことに、オブジェクトを再利用しないでください。C++ の哲学は、必要なときにオブジェクトを作成し、完了したら破棄することです。

{
    std::ostringstream oss;
    oss << 10;
    std::cout << oss.str();
}

{
    std::ostringstream oss;
    oss << 20.5;
    std::cout << oss.str();
}

またはさらに良い:

std::cout << static_cast<std::ostringstream&>(std::ostringstream() << 10).str();
于 2012-07-12T19:17:21.687 に答える
10

clear()エラーフラグのみをクリアします。これはよくある間違いです。を呼び出しstr()、空の文字列を渡してバッファをクリアします。

stream.str("");

あなたが望むことをします。

于 2012-07-12T19:16:59.313 に答える