我试图赶上零尝试:
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]标签而不是四个空格之间吗?
答案 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):
__try
,__except
和异常过滤器仅捕获EXCEPTION_INT_DIVIDE_BY_ZERO:http://msdn.microsoft.com/en-us/library/s58ftw19.aspx,http://msdn.microsoft.com/en-us/library/aa363082.aspx 但是,这是仅限MS的功能。如果您依赖于抛出异常来处理此错误,那么如果您希望它在其他平台上运行,则需要花费大量精力才能在以后更改代码。
最好编写代码,了解除数何时可能为0(就像数学时一样,除以数量,你必须考虑它是否为0)。 Neil的方法是一个很好的低影响解决方案:只要你不确定,就可以使用他的divide
函数。