猿问

C ++:捕获除零错误

C ++:捕获除零错误

这是一段简单的代码,其中除以零。我想抓住它:

#include <iostream>int main(int argc, char *argv[]) {
    int Dividend = 10;
    int Divisor = 0;

    try {
        std::cout << Dividend / Divisor;
    } catch(...) {
        std::cout << "Error.";
    }
    return 0;}

但是应用程序无论如何都会崩溃(即使我选择-fexceptionsMinGW)。

是否有可能捕获到这样的异常(我理解的不是C ++异常,而是FPU异常)?

我知道我可以分割之前检查除数,但是我假设,因为除零是罕见的(至少在我的应用程序中),尝试分割会更有效(并且如果它发生)而不是每次除数前的除数。

我正在WindowsXP计算机上进行这些测试,但是想让它跨平台。


开心每一天1111
浏览 885回答 3
3回答

慕田峪7331174

除以零是一个逻辑错误,程序员的错误。你不应该尝试应对它,你应该调试并消除它。此外,捕获异常是非常昂贵的 - 比分数检查更多。您可以使用结构化异常处理来捕获除以零的错误。如何实现取决于您的编译器。MSVC提供了一个捕获结构化异常的函数,catch(...)并且还提供了将结构化异常转换为常规异常以及提供__try/&nbsp;__except/的功能__finally。但是我对MinGW不太熟悉,告诉你如何在该编译器中完成它。

暮色呼如

没有一种语言标准的方法可以从CPU中捕获零除零点。不要过早“优化”一个分支。您的应用程序在此上下文中是否&nbsp;真的受&nbsp;CPU限制?我对此表示怀疑,如果你破坏你的代码,它并不是真正的优化。否则,我可以让你的代码更快:int&nbsp;main(int&nbsp;argc,&nbsp;char&nbsp;*argv[])&nbsp;{&nbsp;/*&nbsp;Fastest&nbsp;program&nbsp;ever!&nbsp;*/&nbsp;}
随时随地看视频慕课网APP
我要回答