C++ 失败时 istream 行为发生变化

2023-12-03

取自:参考参数

直到 C++11:

如果提取失败(例如,如果在需要数字的地方输入了字母),则值保持不变并设置失败位。

自 C++11 起:

如果提取失败,则将零写入值并设置失败位。如果提取结果导致值太大或太小而无法适应值,std::numeric_limits<T>::max() or std::numeric_limits<T>::min()被写入并设置故障位标志。

由于这一变化,这意味着以下代码片段:

int x = 1;
std::cin >> x;
return x;

如果数值转换失败,将返回1C++11 之前,以及0否则。

为什么标准委员会要引入如此微妙的突破性变化?或者更确切地说,在 C++11 之前什么样的代码可以保证这种更改?


看来按照最初的规定,operator>>在某些情况下,s 被破坏了(即严格来说不可能存在)。 这就是“修复”。

在 2011 年初的草案中,该标准在这方面与 2003 年基本相同。然而,在 Matt Austern 公开的库缺陷报告中(1998 年!),num_get<>::get()不存在于short and int。 所以他们被改为使用long版本,并检查读取数是否在正确范围内。

缺陷报告是here.

(并没有真正解释为什么他们认为他们不能保留最初预期的行为,但这就是标准的这一部分被更改的原因。)

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

C++ 失败时 istream 行为发生变化 的相关文章

随机推荐

  • 使用 XHR2 请求而不是 cordova-file-transfer 将二进制数据下载到应用程序沙箱中

    Cordova 正在 日落 即将弃用 cordovan plugin file 请参阅他们的博文 Cordova 开发社区不会再对文件传输插件进行更多工作 如果您愿意 您可以继续使用文件传输插件 在可预见的将来它应该可以正常工作 我们强烈建
  • Python虚拟机需要CPU来执行字节码吗?

    Python虚拟机需要CPU来执行字节码吗 字节码是否转换为机器码 然后CPU参与该过程 为了在任何计算机上运行应用程序 其代码必须始终以某种方式转换为机器代码 然后由 CPU 执行 问题在于这种情况何时以及如何发生 让我尝试向您展示 Py
  • 在泽西岛调用 SOAP

    我有一个客户的要求 希望围绕 SOAP Web 服务编写一个包装器 REST Web 服务 我对 SOAP 和 REST 都很陌生 谁能告诉我 我们是否可以在 REST Web 服务中调用 SOAP Web 服务 如果是的话 那么在 Jer
  • javascript 将数字除以小数

    我怎样才能将数字 钱 平均除以x数 该数字可以包含一位或两位小数 也可以不包含小数 such as 1000 or 100 2 or 112 34我希望能够将该数字平等地分成 x 部分 但是如果它不是奇数 则将额外的数字添加到最后一个数字
  • 在现有 SqlConnection 中打开 DbContext 连接

    我感兴趣是否打开实体框架DbContext现有 ADO NET 中的连接SqlConnection如果它们都使用相同的连接字符串 即在完全相同的数据库上操作 那么应该不鼓励吗 例如 using TransactionScope scope
  • 将 jRadioButton 添加到 jTable 中

    我正在尝试添加jRadioButton into jTable 我使用了给定的代码 private class CustomCellRenderer extends DefaultTableCellRenderer non Javadoc
  • 将 CSV 字符串与 IN 运算符一起使用时出错

    当我运行以下代码时 declare aaa nvarchar 10 set aaa 1 2 3 Select from Customer where CustomerId in convert nvarchar aaa 10 我收到此错误
  • 如何在 Django 中创建模型包

    拥有相当大的models py文件 包含多个模型 我正在尝试重构 每个文件一个模型 因此我试图创建一个models包 结构如下 app models init py app models first model py app models
  • 使用jquery取消选中复选框时隐藏文本

    默认情况下会选中复选框 如果未选中 他们应该隐藏文本 如何隐藏或显示 jquery 中的文本 html div class check p p div
  • SQLiteException 没有被捕获

    我试图捕获 android database sqlite SQLiteException 错误代码 5 数据库已锁定 异常 try db insert mytable null myvalues catch SQLiteException
  • 如何在 dplyr 中按降序排列奇数,按升序排列偶数

    我在 r 中有以下数据框 ID bay row number 1 43 11 ABC 2 43 6 DEF 3 43 13 QWE 4 43 15 XDF 5 43 4 VGH 6 43 2 TYU 7 11 11 QAS 8 11 13
  • SQL Server - 不聚合的行到列

    我的数据看起来像这样 address id 12AnyStreet 1234 12AnyStreet 1235 12AnyStreet 1236 12AnyStreet 1237 我的目标是让它看起来像这样 Address id1 id2
  • Cloud Dataflow - Dataflow 如何实现并行性?

    我的问题是 在幕后 对于逐元素 Beam DoFn ParDo 云数据流如何并行工作负载 例如 在我的 ParDO 中 我向外部服务器发送一个针对一个元素的 http 请求 我使用了 30 个工人 每个工人有 4vCPU 这是否意味着每个工
  • 如何以二维风格指定单元测试文件夹

    我有一个具有二维风格的项目 例如风味维度 设备 水果 移动香蕉 移动苹果 香蕉 stbApple 所有构建结果都很好 我只想进行单元测试stbApple当选择构建变体在 Android Studio 中 如何实现这一目标 我尝试过以下实验
  • JSR 363 的 UCUM 单位格式

    我正在使用 JSR 363 测量单位 和最新的参考实现
  • rpy2 - “R”对象没有属性“nls”

    我正在使用 rpy2 在 python 中的 r 中进行一些非线性回归 import rpy2 robjects as robjects from rpy2 robjects import DataFrame Formula from rp
  • Python - Urllib2 等待页面加载以抓取数据

    首先 我想说我不想使用 Python 2 7 10 未提供的任何库 同样的问题也发布在 Stack Overflow 上 但在 Requests 库中得到了解答 我有一个使用 urllib2 登录 Roblox com 的脚本 为了在尝试登
  • AngularJS:从模型数组中拼接模型元素时,ng-repeat 列表不会更新

    我有两个控制器 并通过 app factory 函数在它们之间共享数据 单击链接时 第一个控制器会在模型数组 pluginsDisplayed 中添加一个小部件 小部件被推送到数组中 并且此更改反映到视图中 使用 ng repeat 来显示
  • 如何找到至少2个向量中共有的元素?

    假设我有 5 个向量 a lt c 1 2 3 b lt c 2 3 4 c lt c 1 2 5 8 d lt c 2 3 4 6 e lt c 2 7 8 9 我知道我可以使用以下方法计算它们之间的交集Reduce 和 一起inters
  • C++ 失败时 istream 行为发生变化

    取自 参考参数 直到 C 11 如果提取失败 例如 如果在需要数字的地方输入了字母 则值保持不变并设置失败位 自 C 11 起 如果提取失败 则将零写入值并设置失败位 如果提取结果导致值太大或太小而无法适应值 std numeric lim