专栏首页C++核心准则原文翻译C++核心准则E.3:异常应该只用于错误处理

C++核心准则E.3:异常应该只用于错误处理

E.3: Use exceptions for error handling only

E.3:异常应该只用于错误处理

Reason(原因)

To keep error handling separated from "ordinary code." C++ implementations tend to be optimized based on the assumption that exceptions are rare.

保证错误处理和“普通的代码”分离。C++的实现试图以异常处理很罕见为前提进行代码优化。

Example, don't(反面示例)

// don't: exception not used for error handling
int find_index(vector<string>& vec, const string& x)
{
    try {
        for (gsl::index i = 0; i < vec.size(); ++i)
            if (vec[i] == x) throw i;  // found x
    }
    catch (int i) {
        return i;
    }
    return -1;   // not found
}

This is more complicated and most likely runs much slower than the obvious alternative. There is nothing exceptional about finding a value in a vector.

相比于显而易见的其他做法,这段代码更复杂,很有可能执行地更慢。在vector中发现一个值没有什么意外性。

Enforcement(实施建议)

Would need to be heuristic. Look for exception values "leaked" out of catch clauses.

可能需要启发式处理。寻找“泄露”到catch代码段之外的例外值。

原文链接https://github.com/isocpp/CppCoreGuidelines/blob/master/CppCoreGuidelines.md#e3-use-exceptions-for-error-handling-only

本文分享自微信公众号 - 面向对象思考(OOThinkingDalian),作者:面向对象思考

原文出处及转载信息见文内详细说明,如有侵权,请联系 yunjia_community@tencent.com 删除。

原始发表时间:2020-07-27

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

我来说两句

0 条评论
登录 后参与评论

相关文章

  • C++核心准则ES.34:不要定义C风格的可变参数函数

    Not type safe. Requires messy cast-and-macro-laden code to get working right.

    面向对象思考
  • C++核心准则ES.32:宏定义名称全部大写

    Convention. Readability. Distinguishing macros.

    面向对象思考
  • C++核心准则​ES.71: 如果可以,使用范围for代替普通的for语句

    Readability. Error prevention. Efficiency.

    面向对象思考
  • 给企业微信加个群机器人

    现在很多企业在使用企业微信或钉钉进行工作交流,我们可以在群里添加一个自定义群机器人,定时发送一些提醒或咨询信息,它可以作为一个小组手,也为工作增加一点乐趣。

    NanBox
  • iOS WebView内联播放视频无声音

    用户4458175
  • 【iOS 开发】NSError ** 与 throws 的三个问题

    使用的时候我们会传入一个 &error 再获取这个错误值,来看这个过程中有没有什么错误,那么通过 error == nil 不就可以知道是否执行成功吗,为什么需...

    KyXu
  • Python之easy_install安装出错

    forrestlin
  • 中国台湾大学林轩田机器学习基石课程学习笔记8 -- Noise and Error

    上一节课,我们主要介绍了VC Dimension的概念。如果Hypotheses set的VC Dimension是有限的,且有足够多N的资料,同时能够找到一个...

    红色石头
  • 爬虫训练之--获取错误并将其保存进本地文件

    明天依旧可好
  • 10.HanLP实现k均值--文本聚类

    笔记转载于GitHub项目:https://github.com/NLP-LOVE/Introduction-NLP

    mantch

扫码关注云+社区

领取腾讯云代金券