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();