考虑以下代码:
class Test
{
public:
int data;
Test() { data = 9; }
Test myfunction ();
void print() { cout << data<<endl; }
};
Test m;
Test Test::myfunction ()
{
return m;
};
int main()
{
Test b;
Test a;
b=a.myfunction();
b.print();
return 0;
}
即使我只替换函数使用以下内容,输出保持不变(我不会更改主要部分中的任何内容)。为什么会这样?
class Test
{
public:
int data;
Test() { data = 9; }
Test& myfunction ();
void print() { cout << data<<endl; }
};
Test m;
// function replaced and now it has reference return
Test& Test::myfunction ()
{
return m;
};
int main()
{
Test b;
Test a;
b=a.myfunction();
b.print();
return 0;
}
是什么两种情况之间的区别。?我没有太多参考资料,所以请详细解释。
两者都可以正常编译,每种情况下的输出如下:
9
在第一个片段中,您返回全局实例的副本m
。在你的情况下,编译器会生成一个简单的复制构造函数,这将复制您的成员data
。另外,您还可以获得平凡的平凡复制赋值运算符生成将结果复制到b
,同时复制您的会员data
自动地。
第二个版本返回对全局实例的引用m
。从这一点来看,它的工作方式与第一种情况相同:结果被分配给b
。这只是一个复制操作Test
less.
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)