为了账号安全,请及时绑定邮箱和手机立即绑定

C ++捕获块-通过值或引用捕获异常?

C ++捕获块-通过值或引用捕获异常?

C++
梵蒂冈之花 2019-10-16 13:49:46
我总是按价值捕捉异常。例如try{...}catch(CustomException e){...}但是我遇到了一些替代的代码catch(CustomException &e)。这是a)很好b)错误c)是灰色区域吗?
查看完整描述

3 回答

?
烙印99

TA贡献1829条经验 获得超13个赞

C ++中的例外情况的标准做法是...


按价值投掷,按参考捕获


面对继承层次结构,按值捕获是有问题的。对于您的示例,假设存在另一种类型MyException,该类型继承CustomException并覆盖诸如错误代码之类的项。如果MyException引发了类型,则catch块将导致将其转换为CustomException实例,这将导致错误代码更改。


查看完整回答
反对 回复 2019-10-16
?
Smart猫小萌

TA贡献1911条经验 获得超7个赞

如果异常是您捕获的类型的派生类型,则按值捕获将对异常对象进行切片。


这对于catch块中的逻辑可能或不重要,但是没有理由不通过const引用进行捕获。


请注意,如果throw;在catch块中没有参数,则无论您是否捕获切片副本或对异常对象的引用,都将重新引发原始异常。


查看完整回答
反对 回复 2019-10-16
?
慕斯王

TA贡献1864条经验 获得超2个赞

除非您想摆弄异常,否则通常应使用const引用:catch (const CustomException& e) { ... }。编译器处理抛出对象的生存期。


查看完整回答
反对 回复 2019-10-16
  • 3 回答
  • 0 关注
  • 398 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信