为什么函数在返回对象类型的时候一般返回引用而不直接返回目标类型?

研究下面代码到底有什么区别

inline Screen &Screen::move(int x, int y)
{
    return *this;
}
inline Screen Screen::move1(int x, int y)
{
    return *this;
}

没有&符号时, 函数会返回this的拷贝, 使用&符号之后会返回对象的引用, 也就是对象本身。

利用&打印对象的地址

Screen myScreen1(6, 8);
cout << "原始0:" << &myScreen1 << "||" << endl;
const Screen &nsrm1 = myScreen1.move1(4, 0); //返回对象的引用
cout << "&nsrm1:" << &nsrm1 << "||" << endl; //计算引用对象的地址

可以看到 它们是不同的对象

原始0:0x61feb0||
&nsrm1:0x61fed8||

使用场景

  • 实际项目中通常是操作一个比较复杂的对象, 因此我们通常不会创建多个复杂实例, 这时就需要返回对象本身。
  • 在连续调用对象函数时, 必须返回this的引用, 以确保每次调用都是在同一对象上操作。
posted @ 2022-03-31 10:29  Heath Leger  阅读(56)  评论(0编辑  收藏  举报