你如何清除一个stringstreamvariables?

我已经尝试了几件事情,

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

两者都不起作用。

对于所有的标准库types,成员函数empty()是一个查询,而不是一个命令,即它意味着“你是空的吗? 不是“请扔掉你的内容”。

clear()成员函数从iosinheritance,用于清除stream的错误状态,例如,如果文件stream的错误状态设置为eofbit (文件结束),则调用clear()将设置错误状态回到goodbit (没有错误)。

清除stringstream的内容,使用:

 m.str(""); 

是正确的,虽然使用:

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

在技​​术上更高效,因为你避免了调用const char*std::string构造const char* 。 但是现在任何编译器都应该能够在这两种情况下生成相同的代码 – 所以我只会去更可读的东西。

 m.str(""); 

似乎工作。

无论编译器如何,这应该是最可靠的方法:

 m=std::stringstream(); 

您可以清除错误状态并在一行中清空strignstream

 std::stringstream().swap(m); // swap m with a default constructed stringstream 

这有效地将m重置为默认的构造状态

我总是在研究它:

 { std::stringstream ss; ss << "what"; } { std::stringstream ss; ss << "the"; } { std::stringstream ss; ss << "heck"; } 

我的2美分:

这似乎在xcode和dev-c ++中适用于我,我有一个菜单forms的程序,如果按照用户的请求迭代执行,将会填满一个streamtringvariables,在第一次代码会运行但不会清除下一次用户将运行相同的代码的stringstream。 但是下面的两行代码最终在填充stringvariables之前每次清除了stringstreamvariables。 (2小时的反复试验和谷歌search),顺便说一句,使用每一行自己不会做的伎俩。

 //clear the stringstream variable sstm.str(""); sstm.clear(); //fill up the streamstream variable sstm << "crap" << "morecrap"; 

这是一个概念问题。

Stringstream是一个stream,所以它的迭代器是前向的,不能返回。 在输出串stream中,您需要一个flush()来重新初始化它,就像在其他输出stream中一样。

这些不会放弃gnu c ++中的stringstream中的数据

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

以下为我清空stringstream:

  m.str().clear();