猿问

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

我总是按价值捕捉异常。例如


try{

...

}

catch(CustomException e){

...

}

但是我遇到了一些替代的代码catch(CustomException &e)。这是a)很好b)错误c)是灰色区域吗?


梵蒂冈之花
浏览 401回答 3
微课
3回答

烙印99

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

Smart猫小萌

如果异常是您捕获的类型的派生类型,则按值捕获将对异常对象进行切片。这对于catch块中的逻辑可能或不重要,但是没有理由不通过const引用进行捕获。请注意,如果throw;在catch块中没有参数,则无论您是否捕获切片副本或对异常对象的引用,都将重新引发原始异常。

慕斯王

除非您想摆弄异常,否则通常应使用const引用:catch (const CustomException& e) { ... }。编译器处理抛出对象的生存期。
随时随地看视频慕课网APP
我要回答