重载函数的C ++异常规范

时间:2011-08-11 19:59:53

标签: c++

class ESClass
{
public:
    void PrintMe() throw();
    void PrintMe(int) throw(int);
};

我想知道我们是否可以为重载函数定义不同的异常规范。换句话说,我们可以为不同版本的PrintMe函数提供不同的异常规范吗?

  

VS2010的注释:

     

警告C4290:除了指示外,忽略C ++异常规范   函数不是__declspec(nothrow)

1 个答案:

答案 0 :(得分:9)

是:它们是不同的功能,它们可以有不同的异常规范。

如果虚拟成员函数具有异常规范,则任何覆盖(不是重载)必须具有至少与被覆盖的成员函数一样严格的异常规范

当然,除了"never write an exception specification"之外,您应该those few situations where you must

Visual C ++不完全支持异常规范,因此它允许一些根据C ++语言规范实际上无效的代码。 The warning you mention只是意味着您使用的代码使用的是Visual C ++不支持的C ++语言功能:

  

使用异常规范声明函数,Visual C ++接受但未实现。在编译期间忽略的具有异常规范的代码可能需要重新编译和链接,以便在将来支持异常规范的版本中重用。