C ++引用返回类对象 - 为什么不工作?

时间:2014-01-29 19:53:01

标签: c++

如果我使用以下代码,那么为什么以下两种情况的输出相同:

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?

1 个答案:

答案 0 :(得分:0)

如果你要写

,你会得到相同的结果
Test a;
Test &b = a.myfunction();

至于你的代码

Test b;
Test a;
b=a.myfunction();

然后b是一个单独的对象,它被分配了m的副本。所以m的任何变化都不会影响b。 b未被定义为参考。