通过引用捕获对象

Day*_*mer 1 c++ reference exception

我是C++的新手.我看到了一些使用catch块的代码示例,其中异常被值捕获.例如:

catch(SomeClass e)
Run Code Online (Sandbox Code Playgroud)

我也看到了一些引用的例子:

catch(const std:: out_of_range& e)
Run Code Online (Sandbox Code Playgroud)

我假设如果通过引用捕获异常,则应该通过const引用.

我的问题是,当建议使用每种方式时,每种方式有哪些优点/缺点?

谢谢!

tem*_*def 6

建议您通过引用捕获异常,原因有两个:

  1. 按值捕获异常将最终生成抛出的异常对象的副本(与传递参数将生成该对象的副本的方式相同).尽管异常处理可能有点慢,但仍然值得尝试避免这种低效率.

  2. 如果抛出派生类型的异常并按值捕获基类型,则将对异常进行切片,方法与将派生类型按值传递到函数中将切片该对象的方式相同.这可能导致程序中出现错误或异常行为.

希望这可以帮助!