Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/127.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 为什么std::ifstream即使特别启用了异常,也不会引发异常?_C++_Gcc_Ifstream - Fatal编程技术网

C++ 为什么std::ifstream即使特别启用了异常,也不会引发异常?

C++ 为什么std::ifstream即使特别启用了异常,也不会引发异常?,c++,gcc,ifstream,C++,Gcc,Ifstream,因此,默认情况下,当您打开无效的文件路径时,std::ifstream不会引发异常。它会悄无声息地失败,如果不使用fail()方法或类似的方法来检查,它很容易被忽略,这是非常糟糕的 由于我希望获得任何类型故障的异常,以便能够自动通知我,因此我尝试使用建议的exceptions()方法: 令我惊讶的是,如果文件路径不存在,这个仍然不会引发异常。我尝试改用std::ios::badbit,但结果相同 我在Ubuntu上用GCC进行了测试 为什么不能按预期工作?出现故障时,open()设置failbi

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

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

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

我在
Ubuntu
上用
GCC
进行了测试


为什么不能按预期工作?

出现故障时,
open()
设置
failbit
,而不是
badbit
。您不是要求
ifstream
failbit
上抛出异常,而是在发生故障时,
open()
设置
failbit
,而不是
badbit
。您没有要求
ifstream
failbit

上抛出异常。请再看一看。Re:“这很糟糕”--它不会自动失败。您可以检查它是否成功。任何输入操作也会失败。你不能盲目地尝试一堆输入而不检查它是否成功。许多程序员成功地编写了复杂的程序,在I/O失败时不需要异常。@PeteBecker:当然,但是当我们有异常时,检查返回值是一种非常过时和麻烦的编程方式。再看看.Re:“这很糟糕”--它不会默默地失败。您可以检查它是否成功。任何输入操作也会失败。你不能盲目地尝试一堆输入而不检查它是否成功。很多程序员成功地编写了复杂的程序,在I/O失败时不需要异常。@PeteBecker:当然可以,但是当我们有异常时,检查返回值是一种非常过时和麻烦的编程方式。
std::ifstream input_stream;
input_stream.exceptions(std::ifstream::badbit);
input_stream.open(file_path);