例外规范

时间:2010-03-23 16:32:13

标签: c++ exception exception-specification

我知道这个功能将在C ++ 0x中弃用,但对我来说,作为一个新手,拥有它似乎是一个好主意。任何人都可以向我解释为什么不是一个好主意?

3 个答案:

答案 0 :(得分:10)

请参阅Herb Sutter撰写的详细文章。他对其设计中的问题和缺点进行了最全面的解释。

对例外规范的务实看法

答案 1 :(得分:0)

据我了解,异常规范意味着:

我不是(编译器)生成额外的代码,以确保异常是这些类型之一。如果不是请致电终止,我们敬酒。在每次调用中都需要将额外的检查放入(隐式)异常处理程序(实现它)。

答案 2 :(得分:-2)

审核http://www.gotw.ca/publications/mill22.htm

  

发出第一个:“暗影类型系统”

真实,轻微的技术要点,易于修复。

  

发出第二个:(误)理解

     

以下是许多人认为异常规范的作用:

他的第一点:

  
      
  • 保证函数只会抛出列出的异常(可能没有)。
  •   

如果这是人们的想法,那就很好了,因为它正是ES的保证,按照定义。赫伯同意在同一份文件中

  

(ES)在运行时强制执行函数只会抛出列出的异常(可能没有)。

他的第二点:

  
      
  • 根据仅抛出列出的异常(可能没有)的知识启用编译器优化。
  •   

这也绝对正确。

他解释了为什么第二点是一个错误的信念:

// Example 1(b) reprise, and two
// potential white lies:
//
int Gunc() throw();    // will throw nothing (?)

int Hunc() throw(A,B); // can only throw A or B (?)
  

评论是否正确?不完全的。 Gunc()可能确实会抛出一些东西,而Hunc()可能会抛出A或B以外的东西!编译器只是保证如果他们这样做就打败他们......哦,并且在大多数情况下打败你的程序也毫无意义。

     

因为Gunc()或Hunc()确实可以抛弃他们所承诺的东西,不仅编译器不能认为它不会发生(...)

Herb后来评论说“(ES)在运行时强制执行函数只会抛出列出的异常(可能没有)。”也反驳这个“论点”。

Herb的两个要点显然绝对是无可争议的错误,根据他的说法

我还可以添加什么?

我认为,为了“论证”,词语具有固定意义,不能随意改变。