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 回答