为什么传递本地对象来初始化另一个对象很好,但是传递本地对象的引用来初始化另一个对象却没有

问题描述

我写了以下代码。

#include <iostream>
 using namespace std; 
 class Cat
{
 public:
  int itsage;
};
 
 Cat myFunction()
{
 Cat Frisky;
 Frisky.itsage=2;
 return Frisky;
}
 int main()
{
 Cat Mani=myFunction();
 cout << Mani.itsage;
 cout << endl;
 return 0;
}

输出 2

然后我编写了以下代码。

#include <iostream>
 using namespace std; 
 class Cat
{
 public:
  int itsage;
};
 
 Cat & myFunction()
{
 Cat Frisky;
 Frisky.itsage=2;
 return Frisky;
}
 int main()
{
 Cat Mani=myFunction();
 cout << Mani.itsage;
 cout << endl;
 return 0;
}

编译后,我收到reference to local variable 'Frisky' returned的警告,但没有得到任何输出。

我很困惑为什么第一个代码起作用而第二个却不起作用。具体来说,我有以下两个问题:

问题1 :这是第一个代码的工作方式吗?

第1步:创建了Frisky

第2步:执行语句return Frisky,该语句返回Frisky,并且Manimain中进行了初始化。

第3步:myFunction结束并立即销毁了Frisky。但是,由于Mani已被初始化,因此不会产生任何问题。

步骤4:由于Mani已用Frisky初始化,因此Mani.itsage的输出为2

我在这里纠正吗?如果没有,请纠正我。

问题2 ,为什么我认为我的第二个代码应该已经运行。

第1步:创建了Frisky

第2步:执行了语句return Frisky,该语句返回了reference of Frisky(是Frisky的精确副本)和Manimain中进行了初始化(精确到副本)。

第3步:第3步:myFunction结束并立即销毁了Frisky。但是,由于Mani已被初始化,因此不会产生任何问题。

这就是我的想法。但显然我在某个地方搞砸了。

谢谢。

解决方法

暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!

如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。

小编邮箱:dio#foxmail.com (将#修改为@)