Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/asp.net-core/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ std::使用禁用的异常终止(MSVC实现)_C++_Visual C++_Terminate - Fatal编程技术网

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?