【发布时间】:2015-09-18 09:32:14
【问题描述】:
我正在以通常的方式清除std::stringstream:
std::ostringstream ss;
for(...; ...; ...) {
... // Use ss.
if(some_condition_to_reset_stringstream) {
ss.str(std::string());
ss.clear();
}
... // Use ss some more.
}
不幸的是,这不会清除任何粘性操纵器(std::hex、std::setfill 等)。
有没有办法重置整个std::stringstream,包括任何 IO 操纵器?还是我必须单独手动重置每个操纵器(希望在此过程中不要忘记任何一个)?
【问题讨论】:
-
把字符串流扔掉,重新构造一个。
-
@MatteoItalia 字符串流在解析循环中使用,必须在某些迭代中重置,但不是全部。所以不幸的是,我不能每次都构建一个新的。
-
@zennehoy:您可以保存初始标志并通过
std::ostringstream::flags简单地重置它们。请注意,如果要还原所有更改,还必须保存::fill、::width和::precision。