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