一、什么是內聯函數
內聯函數必須是和函數體聲明在一起,才有效。像這樣的申明是沒有效果的:
Inline Tablefunction(int I)
編譯器只是把函數作為普通的函數聲明,我們必須定義函數體:
Inline tablefunction(int I) {return I*I};
這樣我們才算定義了一個內聯函數。我們可以把它作為一般的函數一樣調用。但是執行速度卻比一般函數的執行速度要快。
二、類中的內聯函數
我們也可以將定義在類的外部的函數定義為內聯函數,比如:
Class TableClass{ Private: int i, j; Public: int add(){return i+j;} inline int dec(){return i-j;} int GetNum(); } inline int Tableclass::GetNum(){return i;}
上面申明的三個函數都是內聯函數。在C++中,在類的內部定義了函數體的函數,被默認為是內聯函數。而不管你是否有inline關鍵字。
三、類中內聯函數訪問私有數據成員
內聯函數在C++類中,應用最廣的,應該是用來定義存取函數。我們定義的類中一般會把數據成員定義成私有的或者保護的,這樣,外界就不能直接讀寫我
們類成員的數據了。
對於私有或者保護成員的讀寫就必須使用成員接口函數來進行。如果我們把這些讀寫成員函數定義成內聯函數的話,將會獲得比較好的效率。
Class sample{ Private: int nTest; Public: int readtest() { return nTest; } void settest(int i) { nTest=i; } }
當然,內聯函數也有一定的局限性。就是函數中的執行代碼不能太多了,如果,內聯函數的函數體過大,一般的編譯器會放棄內聯方式,而采用普通的方式
調用函數。這樣,內聯函數就和普通函數執行效率一樣了。
四、使用內聯函數應注意的事項
內聯函數具有
一般函數的特性,它與一般函數所不同之處只在於
函數調用的處理。一般函數進行調用時,要將程序執行權轉到
被調用函數中,然后再返回到調用它的函數中;而內聯函數在調用時,是將調用
表達式用內聯函數體來替換。
在使用內聯函數時,應注意如下幾點:
1.在內聯函數內不允許用
循環語句和開關語句。
如果內聯函數有這些語句,則編譯將該函數視同普通函數那樣產生函數調用代碼,遞歸函數是不能被用來做內聯函數的。內聯函數只適合於只有1~5行的小函數。對一個含有許多語句的大函數,函數調用和返回的開銷相對來說微不足道,所以也沒有必要用內聯函數實現。
2.內聯函數的定義必須出現在內聯函數第一次被調用之前。
3.本欄目講到的類結構中所有在類說明內部定義的函數是內聯函數。
