返回对象的值,将调用对象的拷贝构造函数,构造出一个和该对象中所有属性相等的一个副本,将该副本返回给调用函数,而不是返回对象本身。
而返回对象的引用就是将对象本身返回给调用函数。
例子:
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不再发生改变。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)