转载地址:http://blog.csdn.net/stpeace/article/details/22220777
return *this返回的是当前对象的克隆或者本身(若返回类型为A, 则是克隆, 若返回类型为A&, 则是本身 )。return this返回当前对象的地址(指向当前对象的指针), 下面我们来看看程序吧:
#include <iostream> using namespace std; class A { public: int x; A* get() { return this; } }; int main() { A a; a.x = 4; if(&a == a.get()) { cout << "yes" << endl; } else { cout << "no" << endl; } return 0; }
输出的是yes。也就是说,this是对象的地址。可以赋值给一个该类型的指针。
#include <iostream> using namespace std; class A { public: int x; A get() { return *this; //返回当前对象的拷贝 } }; int main() { A a; a.x = 4; if(a.x == a.get().x) { cout << a.x << endl; } else { cout << "no" << endl; }return 0; }
输出的是4。
也就是*this在函数返回类型为A的时候,返回的是对象的拷贝。
但是,继续对代码添加如下内容:
if(&a == &a.get()) { cout << "yes" << endl; } else { cout << "no" << endl; }
结果发现,编译器报错:
说明,不仅返回的是一个对象的拷贝,还是一个temporary,即临时变量。这个时候,对临时变量取地址,是错误的。error。
(该结论对我所转载的原文进行了修正。原文是错误的。)
继续对代码进行修改:
#include <iostream> using namespace std; class A { public: int x; A& get() { return *this; //返回当前对象的拷贝 } }; int main() { A a; a.x = 4; if(a.x == a.get().x) { cout << a.x << endl; } else { cout << "no" << endl; } if(&a == &a.get()) { cout << "yes" << endl; } else { cout << "no" << endl; } return 0; }
输出结果是4和yes。
也就是*this在函数返回类型为A &的时候,返回的是该对象的引用本身。
时间: 2024-12-21 14:35:50