如果调用类似input_stream >> i;
的东西,其中i
是算术类型,抛出异常或设置坏位等,是否可以保证i
没有改变?
在 C++11 之前,该值保持原样,[参考]:
如果提取失败(例如,如果在需要数字的位置输入了字母),则
value
保持不变并设置failbit
。(至C++11)
但是在C++11之后,没有。如果提取失败,则将其设置为0
(同一引用):
如果提取失败,则向
value
写入零并设置failbit
。如果提取导致值太大或太小而无法容纳值,则写入std::numeric_limits<T>::max()
或std::numeric_limits<T>::min()
并设置failbit
标志。(自C++11起)
参考 cpp 首选项文档以获取std::basic_istream::operator>>
std::num_get::get, std::num_get::do_get
:
1-4) 表现为 FormattedInputFunction。构造并检查哨兵对象(可能会跳过前导空格)后,通过调用 std::num_get::get() 提取整数值
然后
第 3 阶段:转换和存储:
[...]
- 如果转换函数无法转换整个字段,则值 0 存储在 v 中