如果我在c ++中编写代码并抛出异常,我也可以捕获这些异常。例如;
int divide(int divison, int dividor)
{
if (dividor == 0)
throw DivideByZeroException();
return divison / dividor;
}
void main()
{
int a = 10,b=0;
try
{
result = divide(a, b);
cout << "result : " << result << endl;
}
catch (exception & e)
{
cout << e.what() << endl;
}
cout << "Enter a key to exit" << endl;
cin.get();
}
但是,如果我尝试直接捕获相同的异常程序崩溃。例如
void main()
{
int a = 10,b=0;
try
{
result = a / b;
cout << "result : " << result << endl;
}
catch (exception & e)
{
cout << "Normal exception :" << e.what() << endl;
}
cout << "Enter a key to exit" << endl;
cin.get();
}
为什么会发生这种情况,有没有办法在c ++中发生错误时停止程序崩溃?
答案 0 :(得分:2)
在C ++中,除以0不会产生异常:行为未定义(在许多操作系统上,内核会向程序发送信号,如果你不抓住它,程序终止)。
C ++标准,第5/4节
如果在评估表达式期间,结果未在数学上定义或未在其类型的可表示值范围内,则行为未定义。
您可以(应该)在进行分组之前检查您的输入:语言不会为您完成。 (某些数字库封装基本类型,重载运算符,并抛出异常)