一、引入內聯函數的緣由 函數
引入內聯函數的目的是爲了解決程序中函數調用的效率問題。通常狀況下,函數調用會帶來下降效率的問題,由於調用函數時其實是將程序執行順序轉移到函數內存中所在的某個地址。將函數的程序內容執行完後,再轉回到轉去執行該函數前的地方。函數調用會有必定的時間和空間方面的開銷,會影響效率。引入內聯函數就是爲了解決這一問題。 spa
在程序編譯時,編譯器將程序中出現的內聯函數的調用表達式用內聯函數的函數體進行更換,這樣不會產生轉回轉去的問題,但會增長目標程序的代碼量,進而增長空間的開銷。可見,它是以目標代碼的增長爲代價來換取時間的節省(空間換時間)。 遞歸
二、內聯函數的定義方法 內存
在函數定義的前面加上inline關鍵字。 get
eg: inline int max (int a, int b){ 編譯器
return (a > b? a: b); 編譯
} class
三、使用內聯函數的注意事項 效率
(1)在內聯函數中不準與使用循環語句、開關語句和遞歸調用,不然按非內聯函數處理 循環
(2)內聯函數的定義必須出如今內聯函數第一次調用以前
(3)在類結構中全部在類說明內部定義的函數都是內聯函數
四、類中的內聯函數
類的成員函數分爲內聯函數和外聯函數。內聯函數是指那些定義在類體內的成員函數。說明在類體內,定義在類體外的成員函數叫作外聯函數。
內聯函數與帶參數的宏定義的執行效率是同樣的,可是內聯函數要優於宏定義,由於內聯函數遵照函數的類型和做用與規則。
讓外聯函數變成內聯函數只需在函數頭前面加上 inline 關鍵字
舉一個例子:
class A
{
public:
A( int x, int y)//內聯函數
{ X = x; Y = y};
int getX ()//內聯函數
{ return X;}
int getY()//內聯函數
{return Y;}
int sum();//外聯函數
int max();//外聯函數
private:
int X,Y;
};
int A::sum(){
return(X + Y);
}
inline int A::max(){ // 加了 inline 後變成了內聯函數
return (X > Y ? X : Y);
}