我已经尝试了几件事, ios
std::stringstream m; m.empty(); m.clear();
二者都不起做用。 xcode
这些不会在gnu c ++中丢弃stringstream中的数据 函数
m.str(""); m.str() = ""; m.str(std::string());
如下确实为我清空了字符串流: spa
m.str().clear();
不管使用哪一种编译器,这都应该是最可靠的方法: code
m=std::stringstream();
个人2美分: 继承
这彷佛在xcode和dev-c ++中对我有用,我有一个菜单形式的程序,若是按照用户的要求迭代执行,它将填充一个stringstream变量,该变量在第一次执行该代码时就能够正常工做运行,但不会在用户下次运行相同的代码时清除字符串流。 可是下面的两行代码最终每次都会在填充字符串变量以前清除stringstream变量。 (2小时的反复试验和Google搜索),顺便说一句,单独使用每一行都没法解决问题。 字符串
//clear the stringstream variable sstm.str(""); sstm.clear(); //fill up the streamstream variable sstm << "crap" << "morecrap";
m.str("");
彷佛有效。 编译器
对于全部标准库类型,成员函数empty()
都是查询,而不是命令,即表示“您是否为空?” 而不是“请扔掉您的内容”。 string
clear()
成员函数是从ios
继承的,用于清除流的错误状态,例如,若是文件流的错误状态设置为eofbit
(文件结束),则调用clear()
将设置错误状态回到goodbit
(无错误)。 it
要清除stringstream
的内容,请使用:
m.str("");
是正确的,尽管使用:
m.str(std::string());
从技术上讲效率更高,由于能够避免调用采用const char*
的std::string
构造const char*
。 可是,现在,任何一种编译器在两种状况下都应该可以生成相同的代码-所以,我将只使用可读性更高的代码。