专栏首页C++核心准则原文翻译C++核心准则E.17:不要试图在所有函数中捕捉所有异常

C++核心准则E.17:不要试图在所有函数中捕捉所有异常

E.17: Don't try to catch every exception in every function

E.17:不要试图在所有函数中捕捉所有异常

Reason(原因)

Catching an exception in a function that cannot take a meaningful recovery action leads to complexity and waste. Let an exception propagate until it reaches a function that can handle it. Let cleanup actions on the unwinding path be handled by RAII.

在一个无法提供有意义的恢复操作的函数中捕捉错误会导致代码复杂化和冗余。让异常向外传播直到到达一个可以处理它的函数。让RAII处理解旋路径上的清理动作。

Example, don't(反面示例)

void f()   // bad
{
    try {
        // ...
    }
    catch (...) {
        // no action
        throw;   // propagate exception
    }
}
Enforcement(实施建议)
  • Flag nested try-blocks.
  • 标记嵌套的try代码块。
  • Flag source code files with a too high ratio of try-blocks to functions. (??? Problem: define "too high")
  • 识别try代码块数相对函数个数比例过高的源文件。

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

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

原始发表时间:2020-08-04

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

我来说两句

0 条评论
登录 后参与评论

相关文章

  • C++核心准则T.69:在模板内部,不要进行不受限制的非成员函数调用

    T.69: Inside a template, don't make an unqualified non-member function call unle...

    面向对象思考
  • C++核心准则T.40: 使用函数对象向算法传递操作

    Function objects can carry more information through an interface than a "plain" ...

    面向对象思考
  • C++核心准则F.50:不愿意使用函数时使用lambda表达式

    F.50:在不愿意使用函数时使用lambda表达式(例如读取局部变量,访问局部函数)

    面向对象思考
  • R语言基础教程——第六章:函数

    一个函数是组合在一起以执行特定任务的一组语句。R具有大量内置函数,当然用户也可以创建自己的功能。

    DoubleHelix
  • 高性能diff&patch算法 -- 如何将微信Apk的官方增量包20.4M缩小到7.0M

    zhouyi
  • XSS攻击

    XSS叫做跨站脚本攻击,在很早之前这种攻击很常见,2010年数据统计的时候还是排名第二的web安全威胁。在从事前端之后,还没有见过哪个网站会被XSS攻击过,当然...

    wade
  • jQuery animate动画精讲

    HTML5学堂:animate是jQuery中很好用的一个方法,用于实现自定义动画。对于animate方法是有不同的书写方法的,今天我们就来说说animate平...

    HTML5学堂
  • :before 和 :after的多用途实践 — 提升篇

    之前我们已经聊过,关于伪元素 :before 和 :after 的一些基础知识了,但是并没有感觉到他的神奇之处,这次,我们继续来说,看看他有点什么用,基础知识不...

    FEWY
  • 用 Keras 搭建 GAN:图像去模糊中的应用(附代码)

    2014年 Ian Goodfellow 提出了生成对抗网络(GAN)。这篇文章主要介绍在Keras中搭建GAN实现图像去模糊。所有的Keras代码可点击这里。

    AI研习社
  • mac系统下搭建go语言环境

    1,首先查看是否安装go,或者安装版本 yishiyaonie:GO liuhanlin$ go versiongo version go1.5.1 darwi...

    李海彬

扫码关注云+社区

领取腾讯云代金券