首页 > 后端开发 > C++ > 为什么使用 `str(\'\')` 重置字符串流不能清除它?

为什么使用 `str(\'\')` 重置字符串流不能清除它?

DDD
发布: 2024-11-04 03:04:30
原创
989 人浏览过

Why Doesn't Resetting a Stringstream with `str(

清除 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中文网其他相关文章!

来源:php.cn
本站声明
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn
热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板