学习了该博客http://blog.csdn.net/stpeace/article/details/22220777 加上自己的理解
this是个指针,存在于类的非静态成员函数内部,return this 返回的是指向该对象的指针,或 返回的是当前该对象的地址。
return *this 返回当前对象的引用,或者说返回该对象本身 还是当前对象的克隆
代码整理了一下,根据输出地址是否相同来判断是对象本身还是对象的克隆:
#include <iostream> using namespace std; class A { public: A(int a = 1, int b = 1):x(a),y(b) { } A &get() { return *this; } private: int x; int y; }; int main() { A a(1,2); cout << &a << endl; cout << &a.get() <<endl; }
输出地址为: 地址一模一样,说明这两者是a 和 get函数返回的 *this 是同一个东西。
如果将
A &get() { return *this; } 改为 A get() { return *this; }
则 输出地址为 ,两者地址不一样,即a 和 return *this 地址不一样,但是所含数据一样,说明返回 是a 对象的一个拷贝,在空间中另一块地方存着和a相同数据的对象。
但是,如果get()的返回类型是内置类型,如int,该怎么证明 return *this ,是对象的拷贝还是对象本身?
目前的思路是 return *this 的返回类型是 A ,而 this 的返回类型是A *, 但int get()的返回类型是int,如何从int类型转换成A类型,有没有这种转换,好像没有啊。。。。 但是int get()中确实存在this指针,这个this指针指向
调用该函数的对象,但是 *this 究竟是该对象本身呢,还是该对象的拷贝呢,目前还没验证出来。