在類的定義過程中,經常會使用到this關鍵字,那麼我們來理解一下this指標在類定義中的作用。
this只能在成員函式中使用
全域性函式、靜態函式都不能使用this。實際上,成員函式預設第乙個引數為t* const this。如:
1
class
a
2
5
};
其中,func的原型在編譯器看來應該是:
1
int
func(a*
const
this
,
int
p);
this在成員函式的開始前構造,在成員的結束後清除
這個生命週期同任何乙個函式的引數是一樣的,沒有任何區別。
當呼叫乙個類的成員函式時,編譯器將類的指標作為函式的this引數傳遞進去。如:
1
a a;
2
a.func(
10
);
此處,編譯器將會編譯成:
1
a::func(&a,
10
);
看起來和靜態函式沒差別,對嗎?不過,區別還是有的。編譯器通常會對this指標做一些優化,因此,this指標的傳遞效率比較高——如vc通常是通過ecx暫存器傳遞this引數的。
幾個this指標的易混問題
C 裡怎樣定義遞迴函式指標
在c 裡說到函式指標,有很多人都是避而遠之,更別說什麼 遞迴函式指標 了。但是實際上有的東西越是神秘,其原理反而越簡單,所以我這裡就先賣乙個關子,假裝介紹乙個 高深的技巧 一樣做這個開場白了。什麼是 函式指標 呢?別砸我!我想從頭開始講 比如我們定義了乙個函式 int f char 我們先不管它的實...
c 裡的指標
include stdafx.h include include using namespace std void swap1 int inum1,int inum2 void swap2 int inum1,int inum2 void swap3 int pnum1,int pnum2 void...
指標的定義
一般來說,記憶體單元的位址稱為指標 用來存放位址的變數,稱作指標變數 int i,p p i 上面第一行 表示定義乙個int型別的指標變數,當然下面一行取位址也需要定義為int型別 p i表示取到i的位址,p則表示指向取到的i的位址,即表示位址中的的資料。指標定義時要注意野指標或者空指標的錯誤 in...