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

面向对象思考

共 1364字,需浏览 3分钟

 ·

2020-08-04 17:10

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代码块数相对函数个数比例过高的源文件。


原文链接

https://github.com/isocpp/CppCoreGuidelines/blob/master/CppCoreGuidelines.md#e17-dont-try-to-catch-every-exception-in-every-function


新书介绍

以下是本人3月份出版的新书,拜托多多关注!


本书利用Python 的标准GUI 工具包tkinter,通过可执行的示例对23 个设计模式逐个进行说明。这样一方面可以使读者了解真实的软件开发工作中每个设计模式的运用场景和想要解决的问题;另一方面通过对这些问题的解决过程进行说明,让读者明白在编写代码时如何判断使用设计模式的利弊,并合理运用设计模式。

对设计模式感兴趣而且希望随学随用的读者通过本书可以快速跨越从理解到运用的门槛;希望学习Python GUI 编程的读者可以将本书中的示例作为设计和开发的参考;使用Python 语言进行图像分析、数据处理工作的读者可以直接以本书中的示例为基础,迅速构建自己的系统架构。




觉得本文有帮助?请分享给更多人。

关注微信公众号【面向对象思考】轻松学习每一天!

面向对象开发,面向对象思考!



浏览 10
点赞
评论
收藏
分享

手机扫一扫分享

分享
举报
评论
图片
表情
推荐
点赞
评论
收藏
分享

手机扫一扫分享

分享
举报