为了账号安全,请及时绑定邮箱和手机立即绑定

C ++:捕获除零错误

C ++:捕获除零错误

开心每一天1111 2019-08-28 13:44:57
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;}但是应用程序无论如何都会崩溃(即使我选择-fexceptions了MinGW)。是否有可能捕获到这样的异常(我理解的不是C ++异常,而是FPU异常)?我知道我可以在分割之前检查除数,但是我假设,因为除零是罕见的(至少在我的应用程序中),尝试分割会更有效(并且如果它发生)而不是每次除数前的除数。我正在WindowsXP计算机上进行这些测试,但是想让它跨平台。
查看完整描述

3 回答

?
慕田峪7331174

TA贡献1828条经验 获得超13个赞

除以零是一个逻辑错误,程序员的错误。你不应该尝试应对它,你应该调试并消除它。此外,捕获异常是非常昂贵的 - 比分数检查更多。

您可以使用结构化异常处理来捕获除以零的错误。如何实现取决于您的编译器。MSVC提供了一个捕获结构化异常的函数,catch(...)并且还提供了将结构化异常转换为常规异常以及提供__try__except/的功能__finally。但是我对MinGW不太熟悉,告诉你如何在该编译器中完成它。


查看完整回答
反对 回复 2019-08-28
?
暮色呼如

TA贡献1853条经验 获得超9个赞

  1. 没有一种语言标准的方法可以从CPU中捕获零除零点。

  2. 不要过早“优化”一个分支。您的应用程序在此上下文中是否 真的受 CPU限制?我对此表示怀疑,如果你破坏你的代码,它并不是真正的优化。否则,我可以让你的代码更快:

    int main(int argc, char *argv[]) { /* Fastest program ever! */ }


查看完整回答
反对 回复 2019-08-28
  • 3 回答
  • 0 关注
  • 872 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信