this指针介绍
最近在看相關的書籍時,看到了一些關于this指針的介紹,覺得很有用,所以我在下面摘錄一些相關的內容。以供大家參考學習。
this指針本質是一個函數參數
this指針從本質上來說是一個函數參數,這個函數參數是編譯器自動為我們添加的。另外,this指針指向的是對象本身,所以在全局函數以及靜態函數中都不能使用this指針。
例如:
其中,test函數的原型在編譯器看來應該是:
int test(A* const this,int a);this指針聲明周期
this指針在調用成員函數開始前開始構造,在成員函數結束后清除。跟函數的局部參數一樣。當調用一個成員函數時,編譯器將類的指針作為函數的參數傳遞進去。如:
A a; a.test(10);此處,編譯器會將該調用編譯成:
A::test(&a,10);上面的語句跟看起來跟靜態函數一樣,但是編譯器會對傳入進去的this指針進行優化,所以this指針的的傳遞效率比較高。
this存儲位置
this指針是非靜態成員函數的一個隱含參數,不占對象的內存空間,跟對象之間沒有包含的關系,只會占用參數傳遞時的棧空間或者直接占用一個寄存器。
this會因為編譯器的不同又不同的存儲位置,例如堆,棧或者寄存器。
(1)this指針是一個指向對象的‘常指針’,所有對象公用的成員函數利用這個指針區別不同的變量,也就是說,this指針是‘不同對象共享相同成員函數’的保證。
(2)在實際應用中this指針應該是個寄存器參數,這個不是語言規定的,而是‘調用約定’,C++默認調用約定是_cdecl,也就是C風格的調用約定,該約定規定參數自右向左入棧,由調用方負責平衡堆棧。對于成員函數,將對象的指針(this)存入ecx中。
注意
this指針只有在成員函數中才有定義。因此,獲得一個對象后,也不能通過對象使用this指針。所以,我們無法知道一個對象的this指針的位置。但是,在成員函數中,我們是可以知道this指針的位置的。(&this)
總結
- 上一篇: PySpark入门
- 下一篇: WorkNC应用技巧—好用的冲压模侧壁加