我已经试过几次了,
1 2 3
| std::stringstream m;
m.empty();
m.clear(); |
这两个都不起作用。
对于所有标准库类型,成员函数empty()是一个查询,而不是一个命令,即它的意思是"你是空的吗?"不是"请扔掉你的东西"。
clear()成员函数继承自ios并用于清除流的错误状态,例如,如果文件流的错误状态设置为eofbit(文件结束),则调用clear()将错误状态设置回goodbit(无错误)。
用于清除stringstream的内容,使用:
是正确的,尽管使用:
技术上更有效,因为您避免调用采用const char*的std::string构造函数。但是现在的任何编译器都应该能够在这两种情况下生成相同的代码——所以我只使用更具可读性的代码。
您可以清除错误状态并在一行中清空strignstream
1
| std::stringstream().swap(m); // swap m with a default constructed stringstream |
这有效地将m重置为默认构造状态
似乎起作用了。
无论编译器如何,这都应该是最可靠的方法:
我一直在审视它:
1 2 3 4 5 6 7 8 9 10 11 12 13 14
| {
std::stringstream ss;
ss <<"what";
}
{
std::stringstream ss;
ss <<"the";
}
{
std::stringstream ss;
ss <<"heck";
} |
我的2分钱:
在xcode和dev-c++中,这似乎对我有用,我有一个菜单形式的程序,如果按照用户的请求迭代执行,它将填充一个stringstream变量,该变量在代码第一次运行时可以正常工作,但下次用户运行相同代码时不会清除stringstream。但是下面的两行代码在填充字符串变量之前,每次最后都会清除stringstream变量。(2小时的试错和谷歌搜索),顺便说一句,单独使用每一行不会有什么效果。
1 2 3 4 5 6 7
| //clear the stringstream variable
sstm.str("");
sstm.clear();
//fill up the streamstream variable
sstm <<"crap" <<"morecrap"; |
这是一个概念问题。
Stringstream是一个流,因此其迭代器是向前的,无法返回。在输出字符串流中,需要使用flush()重新初始化它,就像在任何其他输出流中一样。
这些不会丢弃GNU C++中的STRIGSTATH流中的数据。
1 2 3
| m.str("");
m.str() ="";
m.str(std::string()); |
以下内容确实为我清空了Stringstream: