C++ 异常处理

本文深入探讨C++中异常处理的两个核心部分:抛出异常与捕获异常。解析为何抛出异常需要临时对象及copy构造的作用,同时阐述如何通过引用避免捕获异常时的再次复制。对比捕获异常与调用方法的异同,强调两者在类型匹配和转换上的区别。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

1、异常处理分为两个部分:抛出异常和捕获异常。

2、抛出异常,类似于方法返回值,离开了作用域,局部对象销毁,因此需要有一个临时对象保存结果。C++特别强调,抛出一个异常,必定要一个临时对象接收,存在copy构造,这是不可避免的,因为抛出的异常已经离开了作用域,失去了控制权。

3、捕获异常,类似于调用方法,将临时对象传递给catch中的局部对象,为了避免再次copy构造,catch语句应该使用引用。特别注意,内置类型的临时对象是不可修改的,也就是说,内置类型的临时对象不能赋值给non-const引用,但是异常对象是可以的,catch语句可以是non-const引用。

4、捕获异常与调用方法的区别:

  a、捕获异常是最先匹配,调用方法是最有匹配。

  b、调用方法存在隐式类型转换,即int可以传递给被调方法中的double形参,捕获异常是不会发生的。二者相同的是,满足里氏代换的情况,可以匹配成功。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值