首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >异常规范与异常处理

异常规范与异常处理
EN

Stack Overflow用户
提问于 2013-07-17 01:06:13
回答 3查看 195关注 0票数 2

这是我们的第四个也是最后一个C++类,我一直在看Herb Sutter关于异常规范的帖子和一些关于stackoverflow的帖子,指出异常规范将在下一版本的C++中被弃用。

我可以找到如何实现异常规范的示例,但我在理解just want异常规范以及它们与异常处理的区别方面存在一些问题。

在提供一些见解方面的任何帮助都将是最有帮助的。

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2013-07-17 01:09:53

异常规范要求编译器通过调用std::unexpected()或使用std::set_unexpected()的替换集来处理所有未列出的异常类型。

它们被普遍认为是一件坏事。

常见的误解:

  • “编译器将检查您是否执行了任何可能引发其他异常的操作。”假。在编译时不检查C++异常。编译器不会检查您是否引发了其他类型,也不会检查您是否忘记处理未列出的异常类型。
  • “你不能抛出其他类型的异常。”False,则在函数内可以抛出任何异常。在运行时,如果函数将通过任何未列出的异常类型异常终止,则将调用意外的处理程序,该处理程序有机会将异常替换为列出的类型。

另请参见std::bad_exception

票数 4
EN

Stack Overflow用户

发布于 2013-07-17 01:07:02

异常规范指定了函数可能抛出的异常。

票数 4
EN

Stack Overflow用户

发布于 2013-07-17 01:48:17

异常规范,顾名思义,通常是关于指定函数可能抛出的异常。然而,如何强制执行may取决于语言。

  • 在C++中,编译器允许该程序,但是它会插入一个运行时检查,如果抛出了任何未指定的东西,它就会调用std::unexpected

一般而言,异常规范几乎被普遍谴责,因为:

  • 他们写得不好。如果你调用两个函数,每个函数抛出一组X和Y的异常,那么产生的函数至少应该声明X和Y的并集。因为它很快就变得不可管理,所以你需要将异常“转换”成一些公共类型,包装在原始类型上以保持上下文。以3或5个深度异常链结束并不罕见。
  • 一些基本操作可能抛出。在C++中,内存分配可能会抛出std::bad_alloc;例如,几乎每个单独的STL集合都容易受到影响。

如果可能的话,忘记你学过的异常规范。

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

https://stackoverflow.com/questions/17682801

复制
相关文章

相似问题

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