Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/google-sheets/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 是否可以在C++;虚拟(纯)类成员?_C++_Exception Specification - Fatal编程技术网

C++ 是否可以在C++;虚拟(纯)类成员?

C++ 是否可以在C++;虚拟(纯)类成员?,c++,exception-specification,C++,Exception Specification,如果是,怎么做 我知道如何为成员提供例外规范,例如 class SOMEClass { public: void method(void) throw (SOMEException); virtual void pure_method(void) = 0; }; 因此方法只抛出一些异常。如果我想确保SOMEClass的子类为pure\u方法抛出SOMEException,是否可以添加异常规范?。这种方法可行吗?或者我需要更多地了解异常和抽象方法,以找出为什么它可以(不)实

如果是,怎么做

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

class SOMEClass
{
public:


   void method(void)  throw (SOMEException); 

   virtual void pure_method(void) = 0;
};
因此
方法
只抛出
一些异常
。如果我想确保
SOMEClass
的子类为
pure\u方法
抛出
SOMEException
,是否可以添加异常规范?。这种方法可行吗?或者我需要更多地了解异常和抽象方法,以找出为什么它可以(不)实现

这是可能的。但只有在throw()情况下才合理。每次派生类忘记在其“action”方法声明上添加“throw()”规范时,编译器都会警告您


这是可能的。但只有在throw()情况下才合理。每次派生类忘记在其“action”方法声明中添加“throw()”规范时,编译器都会警告您。

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

<>但是,大多数C++专家都同意,除了NoFrpFor规范之外,C++异常规范是非常无用的,而它们只是对编译器的暗示,它们并不是按照它们所执行的方式执行的,例如java。
除非您在纯虚拟函数的每一个实现中都添加了相应的catch-all块,否则您无法保证它只会抛出异常规范中列出的异常。

是的,我非常确定在纯虚拟函数上添加了异常规范,尽管我没有尝试过

<>但是,大多数C++专家都同意,除了NoFrpFor规范之外,C++异常规范是非常无用的,而它们只是对编译器的暗示,它们并不是按照它们所执行的方式执行的,例如java。
除非您在纯虚拟函数的每个实现中都添加了相应的catch all块,否则您无法保证它只抛出异常规范中列出的异常。

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


我建议您阅读以下内容:在过度涉及异常规范之前。

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


我建议您阅读以下内容:不过,在过多地涉及异常规范之前。

谢谢大家的回复。我怀疑这可能不是一个好主意,尤其是我刚刚开始在我们的项目中充分使用异常。我还将探讨boost异常,感谢所有人的回复。我怀疑这可能不是一个好主意,尤其是我刚刚开始在我们的项目中充分使用异常。我还将探讨boost异常“它们没有以与Java中相同的方式强制执行”,这是一件好事,因为在Java中它们没有强制执行。“它们没有以与Java中相同的方式强制执行,例如Java”,这是一件好事,因为在Java中它们没有强制执行。
virtual void action() throw() = 0;