c++重载函数异常规范
C++ Exception Specification for overloaded functions
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++接受异常说明,但不实现异常说明。带有异常说明的代码在编译期间被忽略,可能需要重新编译并链接,以便在支持异常说明的未来版本中重用。
相关文章:
- 从构造函数抛出异常时如何克服内存泄漏
- 创建具有 new in 函数和"this is nullptr"异常的对象
- 函数如何通知用户它基于函数原型抛出异常?
- C++/CLI System.AccessViolation在托管类中调用非托管函数时出现异常
- 如何编写带有异常的构造函数
- 有没有办法捕获 STL 函数未被赋予正确参数的异常?
- 在缺少函数重载时抛出异常,并带有 std::variant 而不是编译时错误
- 从函数(不抛出函数)返回异常以进行消息格式化?
- 从 C++ 中异常的构造函数引发异常
- 赋予全局变量而不是局部变量优先级的函数 - (异常行为)
- 是否允许分配器构造和销毁成员函数从内部逻辑引发异常?
- 调用参数不是原子参数的函数是此代码引发异常的原因吗?
- (此函数用于计算 SMA).在 FA.exe 中0x00509159引发异常: 0xC0000005:访问冲突读取位置0
- 我正在尝试创建一个使用 c++ 中的参数包构造函数的异常类
- C++中函数出现Bad_alloc异常
- 为什么 c++ 使用 throw() 关键字来指示函数不会引发任何异常
- 在析构函数内部处理异常(但不抛出)
- 在OpenCV_core310.dll中使用findContours函数时,OpenCV引发未处理的异常
- 为sLinkedList编写插入函数时引发异常
- c++运算符=工作异常(函数内部输出正常,但返回后错误)