try...catch...流程图示

1. 语法形式

before try code

try{
    before throw;

    throw expection;

    after throw;

}catch(expection1){

}catch(expection2){

}catch(expection3){

}catch(...){

}

after try code

2. 逻辑

当try语句中执行代码时,通过throw抛出一个异常时

代码会跳到与catch之后的expection类型一致的第一个catch中的语句块里去执行(包括expection的基类)

如果找不到则返回调用该 try{}catch(){} 所在的函数中去寻找对应的catch语句,如果都找不到则直接调用系统报错函数

如果找到则执行相应的catch语句中的代码,执行之后直接执行最后一个catch之后的代码

3. 注意点

1)通过throw抛出异常之后,在throw所在的try语句块中throw之后的代码不会被执行

2)与catch语句中的类型进行匹配的时候是通过拷贝构造的方式进行传递、

3)匹配会将子类当成基类

4)catch(...)能够匹配任何类型,所以一般放在所有具体情况catch的最后

5)只执行第一个相符的catch

6)如果当前函数中没有找到对应的catch则会返回调用这个函数的函数中去寻找,直至main函数

7)如果一直找不到对应的catch语句,则直接调用系统的保存函数结束程序

8)如果找到对应的catch语句,则会继续执行该catch语句所在的 try{}catch(){}模块中最后的catch之后的代码

9)如果catch中还有throw,则会在更上一层的try{}catch(){}语句块中去寻找

10)throw最好在try{}catch(){}语句块中使用,要不可能会导致使用者逻辑错误

4. 执行流程图

5. 代码测试(每个注意点都可以进行测试,只给出一种如下代码所示)

#include <iostream>

using namespace std;


int testA()
{
    try{
        throw -1.0;

    }catch(char a){
        cout<<"In testA catch int:"<<a<<endl;
    }catch(double b){
        cout<<"In testA catch doubloe:"<<b<<endl;
        throw 1.0;
    }
    cout<<__FUNCTION__<<endl;
}


int main()
{
    cout << "Hello World!" << endl;

    try{

        testA();

    }catch(int a){
        cout<<"In Main catch int:"<<a<<endl;
    }catch(double b){
        cout<<"In Main catch doubloe:"<<b<<endl;
    }

    cout<<"after catch"<<endl;



    return 0;
}

6. 代码输出

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值