为了账号安全,请及时绑定邮箱和手机立即绑定

为什么stringstream >>在失败时更改目标的值?

为什么stringstream >>在失败时更改目标的值?

C++
狐的传说 2019-09-26 09:45:47
摘自Stroustrup的TC ++ PL,第三版,第21.3.3节:如果我们尝试读入变量v并且操作失败,则v的值应该不变(如果v是istream或ostream成员函数处理的类型之一,则它不变)。下面的示例似乎与上述引用矛盾。基于以上引用,我期望v的值保持不变-但它会归零。对于这种明显矛盾的行为有何解释?#include <iostream>#include <sstream>int main( ){     std::stringstream  ss;     ss  << "The quick brown fox.";     int  v = 123;     std::cout << "Before: " << v << "\n";     if( ss >> v )     {         std::cout << "Strange -- was successful at reading a word into an int!\n";     }     std::cout << "After: " << v << "\n";     if( ss.rdstate() & std::stringstream::eofbit  ) std::cout << "state: eofbit\n";     if( ss.rdstate() & std::stringstream::failbit ) std::cout << "state: failbit\n";     if( ss.rdstate() & std::stringstream::badbit  ) std::cout << "state: badbit\n";     return 1;}我使用x86_64-w64-mingw32-g ++。exe(rubenvb-4.7.2-release)4.7.2得到的输出是:Before: 123After: 0state: failbit谢谢。
查看完整描述

3 回答

  • 3 回答
  • 0 关注
  • 542 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信