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将异常再次抛出。
