如何清除stringstream?

The*_* do 113 c++ stringstream

stringstream parser;

parser << 5;
short top = 0;
parser >> top;
parser.str(""); //HERE I'M RESETTING parser

parser << 6; //DOESN'T PUT 6 INTO parser
short bottom = 0;
parser >> bottom;
Run Code Online (Sandbox Code Playgroud)

为什么不起作用?

CB *_*ley 226

通常要"重置"一个字符串流,您需要将基础序列重置为空字符串,str并清除任何失败和eof标志clear.

parser.str( std::string() );
parser.clear();
Run Code Online (Sandbox Code Playgroud)

通常情况下,第一个>>到达字符串的末尾并设置eof位,尽管它成功地解析了第一个short.此后流上的操作立即失败,因为流的eof位仍然设置.

  • 我个人认为`parser.str("")`更清楚,但这是一个意见问题. (25认同)
  • 可能值得编辑这个答案,首先放入parser.clear(),因为其他向流添加内容的方法(例如解析器<< 5)不起作用,除非先调用clear. (4认同)
  • `parser.str({});` (3认同)
  • @TED ,我认为这种方式效率更高,因为您避免在 `const char *` 上调用字符串构造函数 (2认同)
  • @ Mhd.Tahawi - 有些情况下,特别是那些涉及到的东西,这本身就喜欢缩放/破坏动态分配的容器,它是愚蠢的高度做不太清楚事情的一些理论微优化的缘故放缓. (2认同)