Istream异常掩码和处理

istream exception mask and handling

本文关键字:处理 掩码 异常 Istream      更新时间:2023-10-16

如果我有以下代码

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将调用函数括起来,否则异常将破坏代码。

异常是否只查找failbit和badbit?

是的。对exception()的调用设置一个内部成员。如果流的状态发生了变化,使得所设置的标志与用exception设置的标志相匹配,则该流将抛出异常。

如果他们只是设置一个标志,难道不应该用clear(ifstream::failbit | ifstream::badbit)来完成吗?

它设置了一个不同的标志。
基本上你有两个旗子。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

将调用函数括起来

如果你想在本地处理异常(或报告错误),那么是。

否则异常将破坏代码?

Break是错误的词。
如果不处理异常而它转义main,则应用程序将终止。但这是件好事。