1

如果有怎么办?

我知道如何为成员提供异常规范,例如

class SOMEClass
{
public:


   void method(void)  throw (SOMEException); 

   virtual void pure_method(void) = 0;
};

所以method只有投掷SOMEException。如果我想确保SOMEClassthrow SOMEExceptionfor的子类pure_method,是否可以添加异常规范?这种方法是否可行,还是我需要更多地了解异常和抽象方法以找出为什么可以(不能)完成?

4

3 回答 3

6

是的,纯虚拟成员可以有异常规范。

不过,我建议您阅读以下内容:http ://www.gotw.ca/publications/mill22.htm ,然后再过多地参与异常规范。

于 2009-03-26T18:47:12.170 回答
0
virtual void action() throw() = 0;

有可能的。但仅适用于 throw() 情况。每次派生类忘记在其“action”方法声明中添加“throw()”规范时,编译器都会警告您。

于 2009-03-26T18:45:05.700 回答
0

是的,尽管我没有尝试过,但我很确定将异常规范放在纯虚函数上。

然而,大多数 C++ 专家都同意,除了 nothrow 规范之外,C++ 异常规范非常无用,虽然它们是对编译器的提示,但它们的执行方式与它们在例如 Java 中的方式不同。

除非您将适当的 catch-all 块放入纯虚函数的每个实现中,否则您根本无法保证它只会抛出异常规范中列出的异常。

于 2009-03-26T18:45:57.150 回答