关于异常:当整数除以零时,msvc 6会抛出什么?

What does msvc 6 throw when an integer divide by zero occurs?

我一直在做一些实验,并且发现当整数除以零时抛出异常。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
#include <iostream>
#include <stdexcept>

using namespace std;


int main
(
    void
)
{
    try
    {
        int x = 3;
        int y = 0;
        int z = x / y;
        cout <<"Didn't throw or signal" << endl;
    }
    catch (std::exception &e)
    {
        cout <<"Caught exception" << e.what() << endl;
    }

    return 0;
}

显然它不会抛出std :: exception。 还有什么可能扔的?


这是一个Windows结构化异常,与C ++无关 - 如果是C程序,你会得到同样的异常。


本文声称有一种方法可以使用_set_se_translator函数将结构化异常转换为C ++异常。

http://www.codeproject.com/KB/cpp/seexception.aspx


在msvc6中,您可以使用catch(...)捕获它并使用throw重新抛出它; 但是,由于您无法以这种方式检测异常类型,因此最好不要做其他事情。


结果是未定义的,您可以使用__try / __except块来捕获错误(结构化异常处理)。 但是,为什么不在分割之前检查错误呢?