是否有任何理由按价值捕获异常?

HC4*_*ica 2 c++ exception-handling

Sutter和Alexandrescu的编码标准告诉我们通过引用捕获异常.

当然,像这样的一揽子建议通常会偶尔有例外(没有双关语意).是否有任何使用案例,首选按值列出异常?

Pot*_*ter 5

除了明显的不需要可复制性或执行复制(可能是切片)的原因之外,捕获引用的优点是您可以修改它并继续处理throw;.

如果要修改对象,但继续throw;未修改的对象进行异常处理,则必须进行复制,并且执行此操作的一种方法是按值捕获.

不过,我认为这是非常做作的.通过const引用后跟一个明确的副本将更好地表达意图.

另请注意,抛出新的C++ 11 nested_exception将在新异常中嵌套先前抛出的异常对象,而不是值接收的对象.在这种情况下,你可以想象自己保留对收到的异常的引用,除非你通过引用收到它,否则它将变得陈旧.

  • 通过引用捕获的另一个原因是,在抛出派生的异常类并使用基类引用捕获时,避免切片. (4认同)