为什么 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
,但结果相同。
我用 GCC
在 Ubuntu
上测试过。
为什么这没有按预期工作?
失败时,open()
设置 failbit
,而不是 badbit
。您没有要求 ifstream
在 failbit
.
上抛出异常
因此,默认情况下 std::ifstream
在您打开无效文件路径时不会抛出异常。它相当安静地失败了,如果你不使用 fail()
方法或类似的方法来检查,它很容易被忽视,这是非常糟糕的。
因为我想在任何类型的失败时得到异常,所以我可以自动得到通知,我尝试按照建议使用 exceptions()
方法 here:
std::ifstream input_stream;
input_stream.exceptions(std::ifstream::badbit);
input_stream.open(file_path);
令我惊讶的是,如果文件路径不存在,still 不会抛出异常。我尝试使用 std::ios::badbit
,但结果相同。
我用 GCC
在 Ubuntu
上测试过。
为什么这没有按预期工作?
失败时,open()
设置 failbit
,而不是 badbit
。您没有要求 ifstream
在 failbit
.