微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

c – 如何捕获I / O异常(确切的I / O,而不是std :: exception)

我尝试了 here的示例程序(使用mingw-w64).该计划崩溃了.所以我编辑了它:
#include <iostream>     // std::cerr
#include <fstream>      // std::ifstream

int main()
{
    std::ifstream file;
    file.exceptions(std::ifstream::failbit | std::ifstream::badbit);
    try {
        file.open("not_existing.txt");
        while (!file.eof())
            file.get();
        file.close();
    }
    catch (std::ifstream::failure e) {
        std::cerr << "Exception opening/reading/closing file\n";
    }
    catch (const std::exception& e) {
        std::cerr << "should not reach this";
    }

    return 0;
}

现在它运行,但打印不应该达到这个,而我期望它打印异常打开/读取/关闭文件.

为什么我的期望错了?

编辑:
因为这似乎是一个重点,这里是我的编译器的确切版本:mingw-w64版本“x86_64-6.2.0-posix-sjlj-rt_v5-rev1”,即GCC版本6.2

解决方法

这可能是一个MingW错误.我使用MacOS Clang 802.0.42获得了预期的结果.预期的产出是:

Exception opening/reading/closing file

这可能是一个已知的回归:https://gcc.gnu.org/bugzilla/show_bug.cgi?id=66145

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐