c ++异常通过引用按值捕获

时间:2015-03-08 21:28:21

标签: c++ exception-handling

在C ++中按值抛出对象时:抛出异常(),这将创建临时对象,如何通过引用捕获它?我知道它有效,但如果它是一个函数返回值或函数调用它会失败而不添加const到类型,有什么区别?

1 个答案:

答案 0 :(得分:6)

首先,当你写

throw Exception();

抛出的内容实际上并不是由prvalue表达式Exception()创建的临时对象。从概念上讲,有一个单独的对象 - 异常对象 - 从该临时对象初始化,它是实际抛出的异常对象。 (但编译器可以忽略复制/移动。)

其次,语言规则说异常对象总是被认为是左值。因此,允许绑定到非const左值引用。