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

Why does std::ifstream not throw an exception even when exceptions are specifically enabled?

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

因为我想在任何类型的失败时得到异常,所以我可以自动得到通知,我尝试按照建议使用 exceptions() 方法 here:

std::ifstream input_stream;
input_stream.exceptions(std::ifstream::badbit);
input_stream.open(file_path);

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

我用 GCCUbuntu 上测试过。

为什么这没有按预期工作?

失败时,open() 设置 failbit,而不是 badbit。您没有要求 ifstreamfailbit.

上抛出异常