1. this指針的用處:
一個對象的this指針並不是對象本身的一部分,不會影響sizeof(對象)的結果。this作用域是在類內部,當在類的非靜態成員函數中訪問類的非靜態成員的時候,編譯器會自動將對象本身的地址作爲一個隱含參數傳遞給函數。也就是說,即使你沒有寫上this指針,編譯器在編譯的時候也是加上this的,它作爲非靜態成員函數的隱含形參,對各成員的訪問均通過this進行。 例如,調用date.SetMonth(9) <===> SetMonth(&date, 9),this幫助完成了這一轉換 .
2.this指針的特點
· 只能在成員函數中使用
全局函數、靜態函數都不能使用this.實際上,成員函數默認第一個參數爲T * const this。
如:
class A
{
public:
int func(int p)
{
}
};
其中,func的原型在編譯器看來應該是: int func(A * const this,int p);
· this在成員函數的開始前構造,在成員函數的結束後清除這個生命週期同任何一個函數的參數是一樣的,沒有任何區別。
調用一個類的成員函數時,編譯器將類的指針作爲函數的this參數傳遞進去。如:
A a;
a.func(10);
此處,編譯器將會編譯成:A::func(&a,10);
編譯器通常會對this指針做一些優化,因此,this指針的傳遞效率比較高–如VC通常是通過ecx寄存器傳遞this參數的。