为什么即使专门启用了异常,std::ifstream 也不抛出异常?

Bul*_*aza 5 c++ gcc ifstream

因此,默认情况下,std::ifstream当您打开无效的文件路径时不会引发异常。它会默默地失败,如果您不使用该fail()方法或类似的方法进行检查,它很容易被忽视,这是非常糟糕的。

由于我想获得任何类型故障的异常,以便可以自动通知我,因此我尝试使用此处exceptions()建议的方法:

std::ifstream input_stream;
input_stream.exceptions(std::ifstream::badbit);
input_stream.open(file_path);
Run Code Online (Sandbox Code Playgroud)

令我惊讶的是,如果文件路径不存在,这仍然不会引发异常。我尝试使用std::ios::badbit,但结果相同。

Ubuntu用进行了测试GCC

为什么这不能按预期工作?

Rem*_*eau 5

失败时,open()设置failbit,而不是badbit。您并不是要求ifstream抛出异常failbit