C++ 类对象的引用和非引用返回 - 为什么输出相同?

2024-03-28

考虑以下代码:

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(使用前将#替换为@)

C++ 类对象的引用和非引用返回 - 为什么输出相同? 的相关文章

随机推荐