Sutter和Alexandrescu的编码标准tell us通过引用来捕捉异常。
当然,像这样的一揽子推荐通常会偶尔有例外(没有双关语意)。是否有任何用例需要按值来捕获异常?
答案 0 :(得分:5)
捕获引用的优点是,除了明显不需要可复制性或执行复制(可能是切片)的原因之外,您可以修改它并继续使用throw;
进行处理。
如果要修改对象,但在未修改的对象上继续使用throw;
进行异常处理,则必须进行复制,其中一种方法是捕获按价值。
const
引用后跟一个明确的副本可以更好地表达意图。
另请注意,抛出新的C ++ 11 nested_exception
将在新异常中嵌套先前抛出的异常对象,而不是值接收的对象。在这种情况下,你可以想象自己保留对收到的异常的引用,除非你通过引用收到它,否则它将变得陈旧。