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不太熟悉,告诉你如何在该编译器中完成它。
暮色呼如
TA贡献1853条经验 获得超9个赞
没有一种语言标准的方法可以从CPU中捕获零除零点。
不要过早“优化”一个分支。您的应用程序在此上下文中是否 真的受 CPU限制?我对此表示怀疑,如果你破坏你的代码,它并不是真正的优化。否则,我可以让你的代码更快:
int main(int argc, char *argv[]) { /* Fastest program ever! */ }
添加回答
举报
0/150
提交
取消