首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >C++抛出装饰有什么用处吗?

C++抛出装饰有什么用处吗?
EN

Stack Overflow用户
提问于 2009-09-11 10:46:41
回答 4查看 10.2K关注 0票数 15

我已经开始以统一的方式使用C++异常,现在我希望编译器(g++)检查是否存在“异常泄漏”。throw装饰应该做到这一点,就像const对类方法的一致性所做的那样。

嗯,不是这样的。

使用throw仍然是记录性的,但如果其他人认为一个函数不能抛出文档中列出的异常之外的其他异常,那么它甚至可能具有危险的误导性。

能否以某种方式说服g++对其抛出检查更加严格,即真正确保装饰性为throw()的函数永远不会抛出任何东西。

编辑:发现this question广泛地处理这个主题。

EN

回答 4

Stack Overflow用户

回答已采纳

发布于 2009-09-11 10:56:38

它不检查编译时,但符合的编译器应该在运行时确保它。

如果一个函数抛出了抛出声明之外的任何东西,那么如果我没记错的话,C++运行时应该调用std::unexpected。

票数 17
EN

Stack Overflow用户

发布于 2009-09-11 11:12:01

我还建议您查看有关异常规范的this文章。它指出了此C++功能的问题,如:

  • 这是一个影子类型系统
  • 编译器仅在运行时检查抛出的异常
  • 在抛出但未指定的异常的情况下触发的默认行为通常无法使用,并且经常被程序员误解
票数 8
EN

Stack Overflow用户

发布于 2009-09-11 11:03:00

基本上,只有当异常规范为空时,异常规范才有效。否则我会认为他们是一个失败的实验。请参阅phlipsy's answer原因。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/1410226

复制
相关文章

相似问题

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