如果我使用以下代码,那么为什么以下两种情况的输出相同:
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();
m.data=7;
b.print();
return 0;
}
在上面的代码中为什么'b.print()'在屏幕上输出相同的数据,即使我已经改变了'm'的'数据'...? 'b'是对'm'的引用。所以,如果我改变'm'的'data'值,'b'的'data'值也会自动改变......
上述代码的输出是:
9
9 // 为什么不7?
答案 0 :(得分:0)
如果你要写
,你会得到相同的结果Test a;
Test &b = a.myfunction();
至于你的代码
Test b;
Test a;
b=a.myfunction();
然后b是一个单独的对象,它被分配了m的副本。所以m的任何变化都不会影响b。 b未被定义为参考。