C++函数返回对象的值和返回对象的引用的区别

C++函数返回对象的值和返回对象的引用的区别,第1张

返回对象的值,将调用对象的拷贝构造函数,构造出一个和该对象中所有属性相等的一个副本,将该副本返回给调用函数,而不是返回对象本身。


而返回对象的引用就是将对象本身返回给调用函数。


例子:

class Person {
 pubic:
  Person& addAge(const Person& p) {
    this -> age += p.age;
    return *this;
  }

  int age;
};

int main() {
  Person p1;
  p1.age = 10;
  Person p2;
  p2.age = 10;
  p1.addAge(p2).addAge(p2);
  count << p1.age << endl;
}

以上代码运行结果为30,因为p1第一次调用p1.addAge(p2),返回的结果为p1本身,此时p1的age已经变成20。


再次调用addAge依然是p1在调用,因此p1最后age变成30。


如果代码改为:

Person addAge(const Person& p) {
    this -> age += p.age;
    return *this;
}

除了函数的返回值类型改成对象的值以外,其它没变,则运行结果会变成20。


因为p1第一次调用p1.addAge(p2),返回的结果为p1的副本,此时p1的age变成20。


但再次调用addAge,是p1的副本对象在调用,而不是p1本身,因此p1的age不再发生改变。


欢迎分享,转载请注明来源:内存溢出

原文地址: https://outofmemory.cn/langs/562873.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-04-02
下一篇 2022-04-02

发表评论

登录后才能评论

评论列表(0条)

保存