我知道这个功能将在C ++ 0x中弃用,但对我来说,作为一个新手,拥有它似乎是一个好主意。任何人都可以向我解释为什么不是一个好主意?
答案 0 :(得分:10)
答案 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的两个要点显然绝对是无可争议的错误,根据他的说法。
我还可以添加什么?
我认为,为了“论证”,词语具有固定意义,不能随意改变。