C++ 什么是&;返回类型后的平均值为C++;哎呀

C++ 什么是&;返回类型后的平均值为C++;哎呀,c++,overloading,pass-by-reference,C++,Overloading,Pass By Reference,下面给出了一个类的方法,它使用运算符重载将两个复数相乘: Complex运算符*(Complex&c2){ 复合温度; temp.realPart=realPart*c2.realPart-(imaginaryPart*c2.imaginaryPart); temp.imaginaryPart=(realPart*c2.imaginaryPart)+(imaginaryPart*c2.realPart); 返回温度; } 这似乎很有效。但是,当我将成员函数头更改为: Complex&opera

下面给出了一个类的方法,它使用运算符重载将两个复数相乘:

Complex运算符*(Complex&c2){
复合温度;
temp.realPart=realPart*c2.realPart-(imaginaryPart*c2.imaginaryPart);
temp.imaginaryPart=(realPart*c2.imaginaryPart)+(imaginaryPart*c2.realPart);
返回温度;
}
这似乎很有效。但是,当我将成员函数头更改为:

Complex&operator*(Complex&c2){//在类名后添加(&D)。
程序不会崩溃,但在程序上的光标闪烁一段时间后,它无法计算答案/结束。类名后面的&是什么意思?我看到它在返回this指针时被使用

在C中,返回类型后(&F)是什么意思++

它的意思与任何类型后面的&相同。它意味着该类型是一个引用。因此,如果它在返回类型后面,那么它意味着函数返回一个引用

函数返回一个自动变量。返回对自动变量的引用是无用的,因为自动对象在返回时会被销毁,因此该引用立即无效


如果您试图通过返回的无效引用访问不存在的对象,那么程序的行为将是未定义的。

您将返回对对象的引用,就像在任何变量旁边一样,现在在某些情况下这是好的,但在另一些情况下,您可能返回对临时变量的引用,然后通过任何变量如果这些临时对象从内存中释放,那么您将引用一个已释放的内存块
Cherno在他的右值和左值视频中很好地解释了这一点,您可以在这里看到:

返回类型是对对象的引用。您返回对局部变量的引用。引用是自动取消引用指针的语法糖。在封面下,您返回指向对象的指针,该对象在ethod返回。
operator*
应返回一个新对象,因此返回引用是错误的。此外,输入参数应通过
const
reference:
Complex operator*(const Complex&c2)传入
意识到原始版本有效,因为您返回的是
temp
的副本,而不是
temp
本身,而引用版本返回的是对
temp
的引用,该引用位于方法内的堆栈上。但是在返回后,
temp
不再存在。此操作符重载的调用方具有引用对不再存在的事物的否定,因此出现了奇怪的未定义行为。