71-外传篇 2 - 函数的异常规格说明

1、问题1

这里写图片描述

2、

这里写图片描述

3、

这里写图片描述

4、问题2、

这里写图片描述

5、

这里写图片描述

#include <iostream>

using namespace std;

void func() throw(int)
{
    cout << "func()";
    cout << endl;

    throw 'c';
}



int main()
{
    try 
    {
        func();
    } 
    catch(int) 
    {
        cout << "catch(int)";
        cout << endl;
    } 
    catch(char) 
    {
        cout << "catch(char)";
        cout << endl;
    }

    return 0;
}
不同的编译器结果会不一样:
G++编译器和BCC编译器结果一样:
func()
terminate called after throwing an instance of 'char'
Aborted (core dumped)
异常终止

VC编译器:
func()
catch(char)

为什么会出现上述结果,原因在如下图:
6、

这里写图片描述

7、

这里写图片描述

#include <iostream>
#include <cstdlib>
#include <exception>

using namespace std;

void my_unexpected()
{
    cout << "void my_unexpected()" << endl;
    // exit(1);
    throw 1;
}

void func() throw(int)
{
    cout << "func()";
    cout << endl;

    throw 'c';
}

int main()
{
    set_unexpected(my_unexpected);

    try 
    {
        func();
    } 
    catch(int) 
    {
        cout << "catch(int)";
        cout << endl;
    } 
    catch(char) 
    {
        cout << "catch(char)";
        cout << endl;
    }

    return 0;
}
g++编译器和BCC编译器结果:
func()
void my_unexpected()
catch(int)

VC编译器:
func()
catch(char)

可以看出,当在func中抛出字符型异常时(异常类型不再规格说名中),
my_unexpected()被调用,当在my_unexpected()抛出一个int类型
的异常时,这时候该异常符合函数func()的异常规格说明,则恢复程序的
正常执行,紧接着被catch捕获,否则调用调用最终的全局terminate()函数结束异常程序
8、小结

这里写图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值