c++捕获异常中使用catch(...)以及throw与否的崩溃问题对比

    科技2026-03-19  7

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

    Processed: 0.017, SQL: 9