this指針只能在一個類的成員函數中調用,它表示當前對象的地址。下面是一個例子:
void Date::setMonth(int mn )
{
month= mn;// 這三句是等價的
this->month= mn;
(*this).month= mn;
}
1. this只能在成員函數中使用。
2. 全局函數,靜態函數都不能使用this。
3. 實際上,成員函數默認第一個參數為T* const registerthis。
如:
class A{public:int func(int p){}};
其中,func的原型在編譯器看來應該是:int func(A* const registerthis,int p);
4. this在成員函數的開始前構造的,在成員的結束後清除。這個生命周期同任一個函數的參數是一樣的,沒有任何區別。
5. 當調用一個類的成員函數時,編譯器將類的指針作為函數的this參數傳遞進去。
如:
A a;
a.func(10);
此處,編譯器將會編譯成: A::func(&a,10);
6. 和靜態函數沒差別: 編譯器通常會對this指針做一些優化的,因此,this指針的傳遞效率比較高--如vc通常是通過ecx寄存器來傳遞this參數。
7. this在成員函數的開始執行前構造的,在成員的執行棧,也可能是寄存器,甚至全局變量。
8. this是通過函數參數的首參數來傳遞的結束後清除。
9. this指針會因編譯器不同,而放置的位置不同。可能是。
10. this指針是在創建對象前創建.this指針放在棧上,在編譯時刻已經確定.
11. 當一個對象創建後,並且運行整個程序運行期間只有一個this指針.
摘自 梵聲沐晖