重新抛出const异常引用

re throwing const exception reference

本文关键字:引用 异常 const 新抛出      更新时间:2023-10-16

在一道选择题中,有人问我下面的程序在做什么:

catch(const std::exception& e){
  throw e;
}

我回答它是rethrow e(答案C),但答案显然是错误的。

它在做什么?扔一个e的副本(答案D)?

其他可能的答案是:A)处理异常B)捕获e

中的当前堆栈跟踪

谢谢

throw语句复制其参数。这意味着throw e;e切片到它的基类(或者无论e的静态类型是什么)。要重新抛出原始异常,请使用throw; .

抛出一个e的副本。答案D正确。

重新抛出do:

catch(const std::exception& e) {
    throw;
}

它正在做正如锡上所说的:你正在重新扔e。从概念上讲,获取e的值拷贝,尽管编译器可以优化掉任何深度拷贝,如果这样做没有副作用的话。

保证不复制,只需写入throw;