繁体   English   中英

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

[英]How to catch this error? [C++]

我试图赶上零尝试:

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;
}

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

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

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

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

C ++不会检查被零除。 可以在这里找到简短的讨论。

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

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

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

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM