是否保证标准提取运算符>>在失败时不会更改参数?



如果调用类似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 中

相关内容

最新更新