C++中为什么不要使用抛异常声明


本篇内容介绍了“C++中为什么不要使用抛异常声明”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!E.20:不要使用抛异常声明
Exception specifications make error handling bri 香港云主机ttle, impose a run-time cost, and have been removed from the C++ standard.抛异常声明让错误处理更脆弱,强制产生运行时成本,已经从C++标准中被移除了。
Example(示例)如果f()抛出了不同于X和Y的异常,就会激活意外的错误处理,而这个处理的默认动作就是终止程序。那样还好,假设我们已经检查过了,这种事情不会发生,这时如果f被修改为抛出一个新异常Z,系统马上就会发生崩溃,除非我们修改use()(并且重新进行完整测试)。麻烦在于f()可能处于某个我们无法控制的功能库中,而且对于新异常use()也没有什么可做的,或者根本就不感兴趣。我可以修改use()将Z传出,但是接下来user()的调用者可能需要跟着修改。情况很快就会失控。或者我们可以为use()增加try-catch结构将Z映射到一个可以接受的异常。情况很快会再次失控。注意成组修改异常经常发生在系统的底层(例如由于网络库或某个中间件发生变化),因此变更会像气泡一样向上传递至整个调用链。在大规模代码中,这可能意味着没有人可以将库更新到新版本,直到最后的调用者发生变更。如果use()是库的一部分,它可能无法更新,因为这种变更不知道会影响谁。让异常传播直至一个有可能处理它的函数,这样的原则已经证明自己很多年了。
Note(注意)No. This would not be any better had exception specifications been statically enforced. For example, seeStroustrup94.没有。坚持推进使用抛异常声明一点好处也没有。参见Stroustrup. The Design and Evolution of C++ (Addison-Wesley, 1994).
Note(注意)If no exception may be thrown, usenoexceptor its equivalentthrow().如果不会抛出任何异常,使用noexcept或者和它等价的throw()Enforcement(实施建议)Flag every exception specification.标记所有的抛出异常声明。
“C++中为什么不要使用抛异常声明”的内容就介绍到这里了,感谢大家的阅读。如果想了解更多行业相关的知识可以关注开发云网站,小编将为大家输出更多高质量的实用文章!

相关推荐: openindiana如何通过源码安装软件

这篇文章主要介绍“openindiana如何通过源码安装软件”,在日常操作中,相信很多人在openindiana如何通过源码安装软件问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”openindiana如何通过源码安装软件”的疑惑…

免责声明:本站发布的图片视频文字,以转载和分享为主,文章观点不代表本站立场,本站不承担相关法律责任;如果涉及侵权请联系邮箱:360163164@qq.com举报,并提供相关证据,经查实将立刻删除涉嫌侵权内容。

Like (0)
Donate 微信扫一扫 微信扫一扫
Previous 08/25 13:23
Next 08/25 13:23

相关推荐