代码之家  ›  专栏  ›  技术社区  ›  EvilTeach

当整数被零除时,MSVC 6会抛出什么?

  •  0
  • EvilTeach  · 技术社区  · 15 年前

    我做了一些试验,发现当一个整数被零除时,会抛出一个异常。

    #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。它还会扔什么?

    4 回复  |  直到 14 年前
        1
  •  3
  •   anon    15 年前

    这是一个Windows结构的异常,它与C++无关,如果它是C程序,则会得到相同的异常。

        2
  •  1
  •   Mark Ransom    15 年前

    本文声称有一种方法将结构化异常转换为C++异常。 _set_se_translator 功能。

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

        3
  •  0
  •   Brian R. Bondy    15 年前

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

        4
  •  0
  •   Joshua    15 年前

    在MSVC6中,您可以用catch(…)捕获它,然后用throw重新发送它;但是,由于您不能用这种方式检测异常类型,所以最好做其他事情。