【问题标题】:What does msvc 6 throw when an integer divide by zero occurs?当整数除以零时,msvc 6 会抛出什么?
【发布时间】:2009-12-15 19:58:28
【问题描述】:

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

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

【问题讨论】:

  • 不会抛出被零除异常?

标签: exception visual-c++-6


【解决方案1】:

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

【讨论】:

    【解决方案2】:

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

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

    【讨论】:

      【解决方案3】:

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

      【讨论】:

        【解决方案4】:

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

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2011-11-08
          • 2011-07-20
          • 1970-01-01
          • 1970-01-01
          • 2012-10-08
          • 2013-05-31
          相关资源
          最近更新 更多