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 专用
另请参阅
反馈
https://aka.ms/ContentUserFeedback。
即将发布:在整个 2024 年,我们将逐步淘汰作为内容反馈机制的“GitHub 问题”,并将其取代为新的反馈系统。 有关详细信息,请参阅:提交和查看相关反馈