清除 Stringstream
以下代码尝试清除名为 parser 的 stringstream 对象:
<code class="cpp">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;</code>
但是,这种方法不能按预期工作。让我们解释一下原因。
问题:
问题在于字符串流处理文件结尾 (eof) 和失败标志的方式。当第一次提取(>> top)到达字符串末尾时,它设置 eof 位。对流的后续操作会失败,因为 eof 位保持设置状态。
解决方案:
要正确清除字符串流,底层序列以及失败和 eof 标志都必须被重置。以下代码执行此操作:
<code class="cpp">parser.str(std::string()); parser.clear();</code>
str() 方法将底层序列设置为空字符串,而clear() 方法清除失败和 eof 标志。
使用这些更改后,代码将正确地将值 6 读取到解析器流中并将其存储在底部变量中。
以上是为什么使用 `str(\'\')` 重置字符串流不能清除它?的详细内容。更多信息请关注PHP中文网其他相关文章!