2012-04-19 78 views

回答

2

在C++中,在异常声明说明符中,如果我声明一个基类然后抛出一个派生类,那是一个意外的异常吗?

不可以。

参考: C++ 03 15.4异常规范

帕拉6:

例外规格可以包括相同类型的多于一次,并且可以包括作为相关的类通过继承,即使这样做是多余的。异常规范也可以包含类std :: bad_exception(18.6.2.1)。

有一个在
第8段相关的例子:

[Example: 
class X { }; 
class Y { }; 
class Z: public X { }; 
class W { }; 
void f() throw (X, Y) 
{ 
    int n = 0; 
    if (n) throw X(); // OK 
    if (n) throw Z(); // also OK <------- Example of the exact scenario you posted 
    throw W(); // will call unexpected() 
} 
—end example] 

注意异常规范被视为失败和大多数编译器不正确地实现他们的实验。所以请避免(而不要)使用它们。

0

我知道这是可怕的非答案,但请不要使用异常规格:

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

引述相关部分:

道德#1:不要写一个异常规范。

道德#2:除了可能是一个空的,但如果我是你,我甚至会避免。

在C++ 11中对#2的警告是“noexcept”。

相关问题