1、不使用catch(…)
int main()
{
try
{
int da = 0;
int data = 1 / da;
}
catch (const std::exception& e)
{
std::cout << "error:" << e.what() << std::endl;
}
std::cout << "finish" << std::endl;
while (1);
return 0;
}
运行结果如下:
未能捕获异常,程序崩溃退出。
2、添加catch(…)
int main()
{
try
{
int da = 0;
int data = 1 / da;
}
catch (const std::exception& e)
{
std::cout << "error:" << e.what() << std::endl;
}
catch (...)
{
std::cout << "error unknown" << std::endl;
}
std::cout << "finish" << std::endl;
while (1);
return 0;
}
运行结果如下:
异常捕获成功,程序运行正常、不退出。
3、使用了catch(…),但是添加了throw
int main()
{
try
{
int da = 0;
int data = 1 / da;
}
catch (const std::exception& e)
{
std::cout << "error:" << e.what() << std::endl;
}
catch (...)
{
std::cout << "unkonwo" << std::endl;
throw;
}
std::cout << "finish" << std::endl;
while (1);
return 0;
}
运行结果如下:
程序在catch(…)里面被捕获,然是在throw后将异常继续抛出,最终导致程序仍然崩溃。
总结:当要防止程序出现错误后能够捕获各种异常、使程序仍能正常运行不崩溃,最好加上catch(…)再进行捕获一次。如果想让程序不崩溃继续运行,不要在catch里面添加throw将异常再次抛出。