std::runtime_error 异常传递失败

最近开始学习使用cpp的异常。有这样一个使用场景,函数A可能会抛出异常,函数B调用函数A,捕获到A抛出的异常后,做一定的处理,再把这个异常往上抛。main函数调用函数B,捕获到B抛出的异常,但内容却是不对的。
void B() {
    try {
        A();
    } catch (exception & e) {
        cout << e.what() << endl;
        throw e;
    }
}

int main() {
    try {
        B();
    } catch (exception & e) {
	cout << e.what() << endl;
    }

    return 0;
}	
如上代码,B函数里能输出异常,main函数 e.what(); 输出是“std::exception”。后来把函数B的catch的异常参数类型改为 runtime_error,就符合预期了,main函数也能输出"hello world"。百思不得其解。
但是这样不能解决我的问题,A函数可能会抛出其他类型异常,B里本来捕获异常类型为exception,exception的派生类异常(如runtime_error,range_error)都能捕捉到,现在改成runtime_error类型就只能捕捉这种异常。
刚刚又网上搜了下,发现把函数B的catch中的
throw e;
改为
throw;
就符合预期了,函数B的catch的异常参数类型还是exception。这个语法真是醉了。。。






  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值