C++ 异常按值抛出按引用捕获
c++ exceptions throw by value catch by reference
在 C++ 中,当按值抛出对象时,如:throw Exception(),这将创建临时对象,如何通过引用捕获它?我知道它有效,但如果它是一个函数 return 值或函数调用,如果不向类型添加常量,它就会失败,有什么区别?
首先,当你写
throw Exception();
抛出的实际上不是纯右值表达式Exception()
创建的临时对象。从概念上讲,有一个单独的对象 - 异常对象 - 从该临时对象初始化,它是实际抛出的异常对象。 (不过,允许编译器省略 copy/move。)
其次,语言规则规定异常对象始终被视为左值。因此允许绑定到非常量左值引用。
在 C++ 中,当按值抛出对象时,如:throw Exception(),这将创建临时对象,如何通过引用捕获它?我知道它有效,但如果它是一个函数 return 值或函数调用,如果不向类型添加常量,它就会失败,有什么区别?
首先,当你写
throw Exception();
抛出的实际上不是纯右值表达式Exception()
创建的临时对象。从概念上讲,有一个单独的对象 - 异常对象 - 从该临时对象初始化,它是实际抛出的异常对象。 (不过,允许编译器省略 copy/move。)
其次,语言规则规定异常对象始终被视为左值。因此允许绑定到非常量左值引用。