1

如果调用input_stream >> i;where iis 算术类型,抛出异常或设置 badbit 等,是否保证i没有改变?

4

2 回答 2

5

在 C++11 之前,值保持原样,[参考]

如果提取失败(例如,如果在需要数字的地方输入了字母),value则保持不变并failbit设置。(直到 C++11)

但是在 C++11 之后,没有。0如果提取失败(相同参考),则设置为:

如果提取失败,则写入零valuefailbit设置。如果提取导致值太大或太小而无法容纳在值中,std::numeric_limits<T>::max()或者std::numeric_limits<T>::min()被写入并failbit设置标志。(C++11 起)

于 2016-11-27T11:43:25.230 回答
3

参考 cppreference 文档:std::basic_istream::operator>> std::num_get::get, std::num_get::do_get

1-4) 表现为 FormattedInputFunction。在构造和检查哨兵对象后,可能会跳过前导空格,通过调用 std::num_get::get() 提取一个整数值

接着

第 3 阶段:转换和存储:
[...]
- 如果转换函数无法转换整个字段,则将值​0​存储在 v

于 2016-11-27T11:42:10.197 回答