是否保证标准提取运算符>>在失败的情况下不会改变参数?

Dmi*_*y J 1 c++ extraction-operator

如果在调用像input_stream >> i;这里i是算术型,抛出异常或设置badbit等,是保证i并没有改变?

Rak*_*111 5

在C++ 11之前,该值保持不变,[参考]:

如果提取失败(例如,如果输入了预期数字的字母),value则保持未修改并failbit设置.(直到C++ 11)

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

如果提取失败,则写入零valuefailbit设置为零.如果提取导致值太大或太小而无法拟合值,std::numeric_limits<T>::max()或者std::numeric_limits<T>::min()被写入并且failbit设置了标志.(自C++ 11以来)

  • 请注意,某些pre-C++ 11实现未能符合该规范 (3认同)