首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >C++ std::system_error使用与公共捕获std::异常块

C++ std::system_error使用与公共捕获std::异常块
EN

Stack Overflow用户
提问于 2014-05-14 10:08:36
回答 1查看 2.8K关注 0票数 8

std::system_error处理带有关联错误代码的异常。是否可以使用公共catch块获取std::system_error异常消息及其代码?像这样

代码语言:javascript
运行
复制
try{
    // code generating exception
} catch (const std::exception& ex){ // catch all std::exception based exceptions
    logger.log() << ex.what();      // get message and error code
                                    // if exception type is system_error     
}

唯一的方法是直接捕获std::system_error类型并在基本异常类型捕获之前获取其代码吗?广泛使用std::system_error的最佳方法是什么?

EN

Stack Overflow用户

回答已采纳

发布于 2014-05-14 11:44:18

广泛使用std::system_error的最佳方法是什么?

在我看来,最好的办法就是直接抓住例外。

代码语言:javascript
运行
复制
catch (const std::system_error& e) {
    std::cout << e.what() << '\n';
    std::cout << e.code() << '\n';
} catch (const std::exception& e) {
    std::cout << e.what() << '\n'; 
}

唯一的方法是直接捕获std::system_error类型并在基本异常类型捕获之前获取其代码吗?

严格来说这不是唯一的办法。这是显而易见且惯用的方式。您可以使用dynamic_cast

代码语言:javascript
运行
复制
catch (const std::exception& e) {
    std::cout << e.what() << '\n';
    auto se = dynamic_cast<const std::system_error*>(&e);
    if(se != nullptr)
        std::cout << se->code() << '\n';
}

但您在评论中提到,您不喜欢使用dynamic_cast。这也是可以避免的,但不能以任何方式有任何好处。

注意,即使你可以以不明显的方式做事情,但这并不意味着你应该这样做。

票数 9
EN
查看全部 1 条回答
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/23651613

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档