我总是按价值捕捉异常。例如try{...}catch(CustomException e){...}但是我遇到了一些替代的代码catch(CustomException &e)。这是a)很好b)错误c)是灰色区域吗?
3 回答
烙印99
TA贡献1829条经验 获得超13个赞
C ++中的例外情况的标准做法是...
按价值投掷,按参考捕获
面对继承层次结构,按值捕获是有问题的。对于您的示例,假设存在另一种类型MyException,该类型继承CustomException并覆盖诸如错误代码之类的项。如果MyException引发了类型,则catch块将导致将其转换为CustomException实例,这将导致错误代码更改。
Smart猫小萌
TA贡献1911条经验 获得超7个赞
如果异常是您捕获的类型的派生类型,则按值捕获将对异常对象进行切片。
这对于catch块中的逻辑可能或不重要,但是没有理由不通过const引用进行捕获。
请注意,如果throw;在catch块中没有参数,则无论您是否捕获切片副本或对异常对象的引用,都将重新引发原始异常。
慕斯王
TA贡献1864条经验 获得超2个赞
除非您想摆弄异常,否则通常应使用const引用:catch (const CustomException& e) { ... }
。编译器处理抛出对象的生存期。
- 3 回答
- 0 关注
- 398 浏览
添加回答
举报
0/150
提交
取消