是否可以在C ++虚拟(纯)类成员中提供异常?

时间:2009-03-26 18:41:02

标签: c++ exception-specification

如果是这样的话?

我知道如何为

等成员提供例外规范
class SOMEClass
{
public:


   void method(void)  throw (SOMEException); 

   virtual void pure_method(void) = 0;
};

这样method只会引发SOMEException。如果我想确保SOMEClass的子类为SOMEException抛出pure_method,是否可以添加异常规范?这种方法是否可行,或者我是否需要更多地了解异常和抽象方法,以找出可以(不)完成的原因?

3 个答案:

答案 0 :(得分:6)

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

我建议您先阅读此内容:http://www.gotw.ca/publications/mill22.htm,然后才能过多地参与异常规范。

答案 1 :(得分:0)

virtual void action() throw() = 0;

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

答案 2 :(得分:0)

是的,我很确定在纯虚函数上添加了一个异常规范,尽管我还没有尝试过。

但是,大多数C ++专家都认为,除了nothrow规范之外,C ++异常规范是相当无用的,虽然它们是编译器的提示,但它们的实现方式与它们不同,例如Java。 / p>

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