c++重载函数异常规范

C++ Exception Specification for overloaded functions

本文关键字:异常 函数 重载 c++      更新时间:2023-10-16
class ESClass
{
public:
    void PrintMe() throw();
    void PrintMe(int) throw(int);
};

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

from VS2010:

warning C4290: c++异常规范忽略,除非指示函数不是__declspec(nothrow)

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

如果虚成员函数有异常说明,任何重写(不是重载)必须有一个异常说明,该异常说明至少与被重写的成员函数一样严格。

当然,你应该"永远不要写异常说明",除非在那些你必须写的情况下。

Visual c++不完全支持异常规范,所以它允许一些在c++语言规范中实际上无效的代码。您提到的警告只是意味着您正在使用的代码使用了visualc++不支持的c++语言特性:

使用异常说明声明函数,visualc++接受异常说明,但不实现异常说明。带有异常说明的代码在编译期间被忽略,可能需要重新编译并链接,以便在支持异常说明的未来版本中重用。