如果调用input_stream >> i;
where i
is 算术类型,抛出异常或设置 badbit 等,是否保证i
没有改变?
问问题
102 次
2 回答
5
在 C++11 之前,值保持原样,[参考]:
如果提取失败(例如,如果在需要数字的地方输入了字母),
value
则保持不变并failbit
设置。(直到 C++11)
但是在 C++11 之后,没有。0
如果提取失败(相同参考),则设置为:
如果提取失败,则写入零
value
并failbit
设置。如果提取导致值太大或太小而无法容纳在值中,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 回答