c++;异常按值抛出按引用捕获 在C++中,当按值抛出对象时:抛出异常(),这将创建临时对象,它如何被引用捕获?我知道它可以工作,但如果它是函数返回值或函数调用,如果不在类型中添加常量,它就会失败,有什么区别呢?

c++;异常按值抛出按引用捕获 在C++中,当按值抛出对象时:抛出异常(),这将创建临时对象,它如何被引用捕获?我知道它可以工作,但如果它是函数返回值或函数调用,如果不在类型中添加常量,它就会失败,有什么区别呢?,c++,exception-handling,C++,Exception Handling,首先,当您编写 throw Exception(); 抛出的实际上不是由prvalue表达式Exception()创建的临时对象。从概念上讲,有一个单独的对象-异常对象-从临时对象初始化,实际上抛出的是异常对象。(不过,编译器可以省略复制/移动。) 其次,语言规则说异常对象总是被认为是左值。因此允许绑定到非常量左值引用。异常是不同的野兽,它们有自己的语义。这是一个很长的主题。。。这里有3个小时的解释:IIRC,Scott Meyers的书中也有关于这个主题的章节。。。

首先,当您编写

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


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

异常是不同的野兽,它们有自己的语义。这是一个很长的主题。。。这里有3个小时的解释:IIRC,Scott Meyers的书中也有关于这个主题的章节。。。