我正在使用以下 MSVC++ 控制台应用程序代码(在 Windows 8.1、Release、Win32 上运行)尝试向我返回顶级异常:
#include "stdafx.h"
#include <Windows.h>
#include <iostream>
using namespace std;
LONG WINAPI UnhandledExceptionFilter(PEXCEPTION_POINTERS exception)
{
printf("Got an unhandled exception.");
return EXCEPTION_CONTINUE_SEARCH;
}
int _tmain(int argc, _TCHAR* argv[])
{
SetUnhandledExceptionFilter(UnhandledExceptionFilter);
int a = 0;
int b = 0;
int c = a / b;
cin.get();
return 0;
}
我的 UnhandledExceptionFilter
实际上似乎从未在本示例中抛出的被零除异常上被调用,否则我希望显示“Got an unhandled exception”日志消息向上。这是为什么?
最佳答案
整数除以零是未定义的行为。如果一个实现选择为此(或任何其他未定义的行为)引发异常,那很好。如果实现选择不 为某些未定义的行为引发异常,那也很好。当遇到未定义的行为时,无论实现做什么都可以。这不是他们的问题。
显然 MSVC++ 在 Windows 8.1 上运行,Win32 不会在被零除时引发异常。
你永远不应该期望未定义的行为会导致预期的结果。
关于c++ - 为什么我的 UnhandledExceptionFilter 没有被简单地除以零调用?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22493078/