c++ istream异常掩码和处理

e5nszbig  于 2022-12-30  发布在  其他
关注(0)|答案(1)|浏览(174)

如果我有下面的代码

istream in{filename}; // file name is file you want to open.
in.exceptions(ifstream::failbit | ifstream::badbit);

异常是否只查找failbitbadbit?如果它们只是简单地设置一个标志,不应该用clear(ifstream::failbit | ifstream::badbit)来完成吗?另外,如果我使用这个方法,我应该用一个try catch来包围调用函数,否则异常会破坏代码?

hjqgdpho

hjqgdpho1#

异常只查找故障位和坏位吗?
是的。对exception()的调用设置了一个内部成员。如果流的状态发生了变化,使得设置的标志与设置的异常标志相匹配,那么流将抛出一个异常。
如果只是设置一个标志,不应该使用clear(ifstream::failbit)来完成吗|如果流::坏位)。
它树立了一个不同的旗帜。
基本上你有两个标志,state标志和exception标志,当一个函数改变状态标志时,它也会和异常标志进行比较。
你可以这样想。

// NOTE: This is not the real code.
 //       Think of this as the logical way it works.
 void setstate(iostate state)
 {

          rdstate = rdstate | state;
          // Check if we have 
          if (rdstate & exception()) {
              throw Bla{1};
          }
      }
 }

此外,如果使用这个方法,应该用try catch将调用函数括起来
如果你想在本地处理异常(或者报告和错误),那么是的。
否则异常会破坏代码
分手这个词用错了。
如果你不处理一个异常并且它跳出了main,那么应用程序将会被终止,但这是一件好事。

相关问题