English 中文(简体)
C++虚拟(纯)类成员中是否可能提供异常?
原标题:
  • 时间:2009-03-26 18:41:02
  •  标签:

如果是这样,怎么办?

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

class SOMEClass
{
public:


   void method(void)  throw (SOMEException); 

   virtual void pure_method(void) = 0;
};

这样方法只会抛出SOMEException。如果我想确保SOMEClass的子类为pure_method抛出SOMEException,是否可以添加异常规范?这种方法可行吗,还是需要了解更多有关异常和抽象方法的知识才能确定为什么可以(或不可以)实现?

最佳回答

是的,纯虚成员可以有异常规格说明。

我建议您在涉及太多异常规范之前先阅读此文:http://www.gotw.ca/publications/mill22.htm

问题回答

是的,我相当肯定可以在纯虚函数上放置一个异常规范,尽管我尚未尝试过。

然而,大多数C++专家都同意除了nothrow规范外,C++异常规范都是无用的,虽然它们是对编译器的提示,但不像Java那样强制执行。

除非您在每个实现纯虚拟函数中放置适当的捕获所有块,否则您无法保证它只会抛出在异常规范中列出的异常。

virtual void action() throw() = 0;

这是可能的。但是仅适用于throw()的情况。编译器会在派生类忘记在其“action”方法声明中添加“throw()”说明时每次发出警告。





相关问题
热门标签