C++內聯函數
阿新 • • 發佈:2017-06-19
程序執行效率 一定的 由於 turn name 系統 定義 函數聲明 sin
調用函數時需要一定的時間和空間的開銷。C++提供一種提高效率的方法,即在編譯時將函數調用處用函數體替換,類似於C語言中的宏展開。這種在函數調用處直接嵌入函數體的函數稱為內聯函數(inline function),又稱內嵌函數或內置函數。
指定內聯函數的方法很簡單,只需要在定義函數時增加 inline 關鍵字。
註意:是在函數定義時增加 inline 關鍵字,而不是在函數聲明時。在函數聲明時增加 inline 關鍵雖然沒有錯誤,但是也沒有任何效果
inline 關鍵字放在函數聲明處不會起作用:
inline 關鍵字應該與函數體放在一起:
void swap(int&a,int&b); inline void swap(int&a,int&b) { int temp = a; a = b; b = temp; }
采用內聯函數可以有效避免函數調用的開銷,程序執行效率更高。使用內聯函數的缺點就是,如果被聲明為內聯函數的函數體非常大,則編譯器編譯後程序的可執行碼將會變得很大。
另外,如果函數體內出現循環或者其它復雜的控制結構的時候,這個時候處理這些復雜控制結構所花費的時間遠大於函數調用所花的時間,因此如果將這類函數聲明為內聯函數意義不大,反而會使得編譯後可執行代碼變長。
通常在程序設計過程中,我們會將一些頻繁被調用的短小函數聲明為內聯函數。
應當說明:對函數作inline聲明,只是程序員對編譯系統提出的一個建議,也就是說它是建議性的,而不是指令性的。並非一經指定為inline,編譯系統就必須這樣做。編譯系統會根據具體情況決定是否這樣做。
一個完整的示例:
#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;
C++內聯函數