C++ std::使用禁用的异常终止(MSVC实现)
从使用禁用异常编译的代码调用C++ std::使用禁用的异常终止(MSVC实现),c++,visual-c++,terminate,C++,Visual C++,Terminate,从使用禁用异常编译的代码调用std::terminate(),我注意到gcc和msvc的行为不同。在第一种情况下,程序按我的预期中止,而在第二种情况下,什么也没发生(程序继续执行) 事实证明,当未设置_has_EXCEPTIONS宏时,msvc有终止函数的虚拟实现: inline void __CRTDECL terminate() _NOEXCEPT { // handle exception termination } Visual Studio 2017,版本15.7.2 参考资料说
std::terminate()
,我注意到gcc和msvc的行为不同。在第一种情况下,程序按我的预期中止,而在第二种情况下,什么也没发生(程序继续执行)
事实证明,当未设置_has_EXCEPTIONS宏时,msvc有终止函数的虚拟实现:
inline void __CRTDECL terminate() _NOEXCEPT
{ // handle exception termination
}
Visual Studio 2017,版本15.7.2
参考资料说:
std::terminate()也可以直接从程序中调用
这不是说无论如何都必须调用中止/处理程序,而不是依赖于例外能力?
,而不将任何NoT-C++语言做太多的无用变更到基本语言是一个好主意,不能因为C++不是C++而求助于C++标准,而只能是常识,这可能不像预期的那样普遍。或者根本不是我们的。我不知道你是怎么得到这种行为的。如果禁用了异常,则std::terminate将调用中止
。我没有看到任何类型的虚拟实现被实际调用。“选项_HAS_EXCEPTIONS=0未记录、未测试,Microsoft不支持……”:source@RichardCritten,我认为这条注释应该是答案。@VTT,在异常头中有不同的实现吗?您有什么版本的Visual Studio?