Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/string/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 如何清除std::ostringstream实例以使其可以重用?_C++_String_Std_Stringstream - Fatal编程技术网

C++ 如何清除std::ostringstream实例以使其可以重用?

C++ 如何清除std::ostringstream实例以使其可以重用?,c++,string,std,stringstream,C++,String,Std,Stringstream,可能重复: 我一直在使用std::ostringstream将float和int值转换为字符串,但我找不到重用实例的方法。为了说明我在这里的意思,下面是我尝试用来清除流的方法 #include <iostream> #include <sstream> using namespace std; int main() { ostringstream stream; stream << "Test"; cout << st

可能重复:

我一直在使用
std::ostringstream
float
int
值转换为字符串,但我找不到重用实例的方法。为了说明我在这里的意思,下面是我尝试用来清除流的方法

 #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;
 }
这给了我一个问题,因为我必须创建许多
ostringstream
的实例,这是浪费。显然
clear()
flush()
不做我需要的事情,那么有什么方法可以做到这一点吗?我在查看了文档,但那里似乎没有我需要的东西。是否有方法重置或清除流???

clear()
仅清除错误标志。这是一个常见的错误。要调用
str()
,并向其传递一个空字符串以清除缓冲区:

stream.str("");
将执行您想要的操作。

使用
stream.str(“”)
将基础字符串设置为空字符串。更好的是,不要重用对象。在C++中,哲学是在需要的时候制作一个对象,在完成后处理它:

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

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

oss+1:正准备说同样的话。虽然正在做
stream.str(“”)
我总觉得自己是个黑客。除了开头的部分或更好的部分:以及后面的其他部分外,一般都同意你的帖子。你不可能认为这更好,对吧?!@happygreenjundaps:这只是一个例子。当然你可以写
std::cout没有这样的东西吗“C++中的哲学,当你需要它时,做一个对象,在你完成的时候处理它。”使用STR(“”)调用是“重置”StrueSnkes的完美方法。这是你使用STATICE-CAST的暗示,通常被预言永远不会在应用代码中使用,这是一个反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();