調用函數時須要必定的時間和空間的開銷。C++提供一種提升效率的方法,即在編譯時將函數調用處用函數體替換,相似於C語言中的宏展開。這種在函數調用處直接嵌入函數體的函數稱爲內聯函數(inline function),又稱內嵌函數或內置函數。ios
指定內聯函數的方法很簡單,只須要在定義函數時增長 inline 關鍵字。程序員
注意:是在函數定義時增長 inline 關鍵字,而不是在函數聲明時。在函數聲明時增長 inline 關鍵雖然沒有錯誤,可是也沒有任何效果函數
inline 關鍵字放在函數聲明處不會起做用:spa
inline 關鍵字應該與函數體放在一塊兒:設計
void swap(int&a,int&b); inline void swap(int&a,int&b) { int temp = a; a = b; b = temp; }
採用內聯函數能夠有效避免函數調用的開銷,程序執行效率更高。使用內聯函數的缺點就是,若是被聲明爲內聯函數的函數體很是大,則編譯器編譯後程序的可執行碼將會變得很大。blog
另外,若是函數體內出現循環或者其它複雜的控制結構的時候,這個時候處理這些複雜控制結構所花費的時間遠大於函數調用所花的時間,所以若是將這類函數聲明爲內聯函數意義不大,反而會使得編譯後可執行代碼變長。編譯器
一般在程序設計過程當中,咱們會將一些頻繁被調用的短小函數聲明爲內聯函數。io
應當說明:對函數做inline聲明,只是程序員對編譯系統提出的一個建議,也就是說它是建議性的,而不是指令性的。並不是一經指定爲inline,編譯系統就必須這樣作。編譯系統會根據具體狀況決定是否這樣作。編譯
一個完整的示例:function
#include<iostream> usingnamespace std; int max(int,int,int);//函數聲明,左端也能夠加inline int main() { int i=10, j=20, k=30, m; m =max(i, j, k); cout<<"max="<<m<<endl; return0; } inline int max(int a,int b,int c)//定義max爲內聯函數 { if(b>a) a=b; if(c>a) a=c; return a; }
運行結果:
max=30
因爲在定義函數時指定它爲內置函數,所以編譯系統在遇到函數調用「max(i, j, k)」時,就用max函數體的代碼代替「max(i,j, k)」,同時將實參代替形參。這樣,程序第6行 「m=max(i, j, k);」就被置換成:
if (j>i) i=j; if(k>i) i=k; m=i;