如何捕获此错误? [C ++]

时间:2009-12-07 09:54:15

标签: c++ error-handling

我试图赶上零尝试:

int _tmain(int argc, _TCHAR* argv[])
{
int a = 5;
try
{
int b = a / 0;
}
catch(const exception& e)
{
    cerr << e.what();
}
catch(...)
{
    cerr << "Unknown error.";
}
    cin.get();
return 0;
}

基本上它不起作用。有什么建议吗? 谢谢。 附: 未来的代码可以放在[code] [/ code]标签而不是四个空格之间吗?

3 个答案:

答案 0 :(得分:7)

除以零不会引发标准C ++中的任何异常,相反,它会为您提供未定义的行为。通常,如果您想提出异常,则需要自己完成:

int divide( int a, int b ) {
   if ( b == 0 ) {
      throw DivideByZero;    // or whatever
   }
   return a / b;
}

答案 1 :(得分:2)

最好的方法是检查除数是否等于0。

C ++不会检查被零除。可以找到一个简短的讨论here

答案 2 :(得分:2)

您似乎正在为Windows编写代码(证据:_tmain_TCHAR不是可移植的C ++)。

如果您想要一个仅适用于Windows的解决方案,那么您可以使用所谓的“结构化异常处理”(SEH):

但是,这是仅限MS的功能。如果您依赖于抛出异常来处理此错误,那么如果您希望它在其他平台上运行,则需要花费大量精力才能在以后更改代码。

最好编写代码,了解除数何时可能为0(就像数学时一样,除以数量,你必须考虑它是否为0)。 Neil的方法是一个很好的低影响解决方案:只要你不确定,就可以使用他的divide函数。