Mr.*_*Boy 92 c++ exception-handling
可能重复:
在C++中通过指针捕获异常
我总是通过价值来捕捉异常.例如
try{
...
}
catch(CustomException e){
...
}
Run Code Online (Sandbox Code Playgroud)
但我遇到了一些相反的代码catch(CustomException &e).这是a)罚款b)错误c)灰色区域?
Jar*_*Par 136
C++中异常的标准做法是......
按价值投掷,以参考方式捕获
面对继承层次结构,按值获取是有问题的.假设您的示例存在另一种类型MyException,它继承CustomException并覆盖错误代码之类的项目.如果MyException抛出了一个类型,你的catch块会导致它被转换为一个CustomException导致错误代码改变的实例.
CB *_*ley 27
如果异常属于您捕获的类型的派生类型,则按值捕获将切片异常对象.
这对于catch块中的逻辑可能有问题,也可能无关紧要,但没有理由不通过const引用捕获.
请注意,如果throw;在catch块中没有参数,则无论是否捕获到切片副本或对异常对象的引用,都会重新引发原始异常.