首页  >  文章  >  后端开发  >  为什么'stringstream >>”在提取失败时修改变量的值?

为什么'stringstream >>”在提取失败时修改变量的值?

Barbara Streisand
Barbara Streisand原创
2024-11-27 05:02:21386浏览

Why Does `stringstream >>` 在提取失败时修改变量的值?
>` 在提取失败时修改变量的值? " />

Stringstream 的不一致行为 >> 失败时值修改

如 Stroustrup 在 TC PL 第 3 版第 21.3.3 节中所述,读取操作失败时变量的值应保持不变但是,使用 stringstream 时会出现特殊行为。 >> 具有不匹配的数据类型。

在给出的代码片段中,整数变量 v 被初始化为 123。当尝试使用 stringstream >> 读取单词到该整数时,尽管预期保留其原始值,v 的值仍为零。

C 11 标准中的澄清解决了这一明显的矛盾,此前,在提取失败时,值保持不变,并且设置了故障位。但是,在 C 11 中,现在将零写入变量,并且故障位仍然设置。

这种改变行为的原因在于 std 的更改。 ::scanf 风格的输入解析到 C 11 中 std::strtoll 和类似函数的使用。这些函数以不同的方式处理数字转换,导致提取失败时修改 v。

以上是为什么'stringstream >>”在提取失败时修改变量的值?的详细内容。更多信息请关注PHP中文网其他相关文章!

声明:
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn