C++ istream异常掩码和处理

C++ istream异常掩码和处理,c++,exception-handling,iostream,C++,Exception Handling,Iostream,如果我有以下代码 istream in{filename}; // file name is file you want to open. in.exceptions(ifstream::failbit | ifstream::badbit); 异常是否只查找故障位和坏位?如果他们只是简单地设置一个标志,那么不应该使用clear(ifstream::failbit | ifstream::badbit)来完成吗。另外,如果我使用这个方法,我应该用try-catch来封装调用函数,否则异常会破坏

如果我有以下代码

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

异常是否只查找
故障位
坏位
?如果他们只是简单地设置一个标志,那么不应该使用
clear(ifstream::failbit | ifstream::badbit)
来完成吗。另外,如果我使用这个方法,我应该用try-catch来封装调用函数,否则异常会破坏代码?

我不理解这个问题,如果你问
clear
是否可以抛出,是的,它可以抛出。如果您问为什么不使用
clear
设置异常掩码,那是因为错误状态与流中的异常是分开的,因为不是每个人都想使用它们。至于调用一个可以抛出的函数,您最终会希望捕获异常,因为否则您的程序将
终止
。捕获它的位置完全取决于您认为可以处理异常的位置,而异常可能不在即时调用函数中。是的,它将只查找
failbit
badbit
;它不会设置标志,但在设置标志(或者如果已经设置标志)时会引发异常。您应该将可以设置标志的代码放在try-catch块中。