學習了該博客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 究竟是該對象本身呢,還是該對象的拷貝呢,目前還沒驗證出來。