How to clear stringstream?
1 2 3 4 5 6 7 8 9 10
| 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; |
为什么不起作用?
通常,要"重置"字符串流,您需要使用str将基础序列重置为空字符串,并使用clear清除任何失败和eof标志。
1 2
| parser.str( std::string() );
parser.clear(); |
通常情况下,第一个>>到达字符串的末尾并设置eof位,尽管它成功地解析了第一个短字符串。在此之后,流上的操作将立即失败,因为流的EOF位仍处于设置状态。
- 是的,它在使用了operator>>()之后设置eof,有时也会设置fail。谢谢
- 我个人认为parser.str("")更清楚,但这是一个观点问题。
- 可能值得首先编辑这个答案以放置parser.clear(),因为向流中添加内容的其他方法(例如parser<<5)不起作用,除非首先调用clear。
- @T.E.D.,我认为这样做更有效,因为您避免在const char *上调用字符串构造函数。
- @Mhd.Tahawi——有些情况下,特别是涉及到一些固有的缓慢的事情,比如动态分配容器的大小调整/销毁,在这些情况下,为了一些理论上的微观优化而做不太清楚的事情是愚蠢的。