Share via


nothrow (C++)

Microsoft 专用

__declspec 扩展特性,可在函数声明中使用。

语法

return-type__declspec(nothrow) [call-convention] function-name ([argument-list])

备注

建议所有新代码都使用 noexcept 运算符而不是 __declspec(nothrow)

此特性告知编译器,声明的函数及其调用的函数从不引发异常。 但是,它不强制实施该指令。 换句话说,它从不导致调用 std::terminate,不像 noexcept,或 std:c++17 模式下(Visual Studio 2017 版本 15.5 及更高版本)的 throw()

利用当前默认的同步异常处理模式,编译器可以消除跟踪此类函数中的某些不可展开的对象的生命周期的机制,从而显著减小代码大小。 在使用以下预处理器指令的情况下,下面的三个函数声明在 /std:c++14 模式下是等效的:

#define WINAPI __declspec(nothrow) __stdcall

void WINAPI f1();
void __declspec(nothrow) __stdcall f2();
void __stdcall f3() throw();

/std:c++17 模式下,throw() 与使用 __declspec(nothrow) 的其他函数不等效,因为当从函数引发异常时,它将导致 std::terminate 调用。

void __stdcall f3() throw(); 声明使用由 C++ 标准定义的语法。 在 C++17 中,throw() 关键字已弃用。

结束 Microsoft 专用

另请参阅

__declspec
noexcept
关键字