• C++ 的异常处理,try, catch, throw


    C++ 引入了异常处理机制。其基本思想是:函数 A 在执行过程中发现异常时可以不加处理,而只是“拋出一个异常”给 A 的调用者,假定为函数 B。

    拋出异常而不加处理会导致函数 A 立即中止,在这种情况下,函数 B 可以选择捕获 A 拋出的异常进行处理,也可以选择置之不理。如果置之不理,这个异常就会被拋给 B 的调用者,以此类推。

    如果一层层的函数都不处理异常,异常最终会被拋给最外层的 main 函数。main 函数应该处理异常。如果main函数也不处理异常,那么程序就会立即异常地中止。

    C++异常处理基本语法

    C++ 通过 throw 语句和 try...catch 语句实现对异常的处理。throw 语句的语法如下:

    throw 表达式;

    该语句拋出一个异常。异常是一个表达式,其值的类型可以是基本类型,也可以是类。

    try...catch 语句的语法如下:

    1. try {
    2. 语句组
    3. }
    4. catch(异常类型) {
    5. 异常处理代码
    6. }
    7. ...
    8. catch(异常类型) {
    9. 异常处理代码
    10. }

    catch 可以有多个,但至少要有一个。

    不妨把 try 和其后{}中的内容称作“try块”,把 catch 和其后{}中的内容称作“catch块”。

    try...catch 语句的执行过程是:

    • 执行 try 块中的语句,如果执行的过程中没有异常拋出,那么执行完后就执行最后一个 catch 块后面的语句,所有 catch 块中的语句都不会被执行;
    • 如果 try 块执行的过程中拋出了异常,那么拋出异常后立即跳转到第一个“异常类型”和拋出的异常类型匹配的 catch 块中执行(称作异常被该 catch 块“捕获”),执行完后再跳转到最后一个 catch 块后面继续执行。

    例如:

    1. int main() {
    2. int a, b;
    3. cin >> a >> b;
    4. try {
    5. if (b == 0) {
    6. throw - 1; //抛出int类型异常
    7. }
    8. }
    9. catch (double d) {
    10. cout << "catch(double)" << d << endl;
    11. }
    12. catch (int e) {
    13. cout << "catch(int)" << e << endl;
    14. }
    15. cout << "finished" << endl;
    16. return 0;
    17. }

    输入:4 0

    输出:

    1. catch(int)-1
    2. finished

  • 相关阅读:
    wpf窗体背景添加径向渐变效果实现
    ZJCA数字证书用户责任书
    关于ruoyi(若依)框架的介绍,若依项目的入门,ruoyi(若依)框架的优缺点
    利用bat脚本 一键将文件中的png图片转为 jpg图片
    STM32-程序占用内存大小计算
    LeetCode50天刷题计划(Day 13—— 四树之和(8.50-10.00)
    农产品溯源中GIS应用
    F03-Flask
    JWT -- Json Web token
    阿里巴巴面试题- - -Java体系最新面试题(十)
  • 原文地址:https://blog.csdn.net/weixin_46653651/article/details/133822091