呼叫函式時需要一定的時間和空間的開銷。c++提供一種提高效率的方法,即在編譯時將函式呼叫處用函式體替換,類似於c語言中的巨集展開。這種在函式呼叫處直接嵌入函式體的函式稱為內聯函式(inline function),又稱內嵌函式或內嵌函式。
指定內聯函式的方法很簡單,只需要在定義函式時增加 inline 關鍵字。
注意:是在函式定義時增加 inline 關鍵字,而不是在函式宣告時。在函式宣告時增加 inline 關鍵雖然沒有錯誤,但是也沒有任何效果
inline 關鍵字放在函式宣告處不會起作用:
inline void swap(int &a, int &b);
void swap(int &a, int &b)
inline 關鍵字應該與函式體放在一起:
void swap(int &a, int &b);
inline void swap(int &a, int &b)
採用內聯函式可以有效避免函式呼叫的開銷,程式執行效率更高。使用內聯函式的缺點就是,如果被宣告為內聯函式的函式體非常大,則編譯器編譯後程式的可執行碼將會變得很大。
另外,如果函式體內出現迴圈或者其它複雜的控制結構的時候,這個時候處理這些複雜控制結構所花費的時間遠大於函式呼叫所花的時間,因此如果將這類函式宣告為內聯函式意義不大,反而會使得編譯後可執行**變長。
通常在程式設計過程中,我們會將一些頻繁被呼叫的短小函式宣告為內聯函式。
應當說明:對函式作inline宣告,只是程式設計師對編譯系統提出的乙個建議,也就是說它是建議性的,而不是指令性的。並非一經指定為inline,編譯系統就必須這樣做。編譯系統會根據具體情況決定是否這樣做。
乙個完整的示例:
#include
using namespace std;
int max(int, int, int); //函式宣告,左端也可以加inline
int main( )
執行結果:
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 內建函式(內聯函式)
函式呼叫在執行時,首先要在棧中為形參和區域性變數分配儲存空間,然後還要將實參的值複製給形參,接下來還要將函式的返回位址 該位址指明了函式執行結束後,程式應該回到 繼續執行 放入棧中,最後才跳轉到函式內部執行。這個過程是要耗費時間的。另外,函式執行 return 語句返回時,需要從棧中 形參和區域性變...
C 內聯函式
1 什麼是內聯函式?內聯函式就是小型函式,犧牲空間來節省函式呼叫的開銷,一般用作比較小的函式,即函式內部沒有迴圈 開關語句等。內聯函式被發明出來就是為了取代c中的巨集,因為巨集是單純的替換而沒有型別檢查所以經常出毛病,2 為什麼要引入內聯函式?當然,引入內聯函式的主要目的是 解決程式中函式呼叫的效率...
C 內聯函式
1 什麼是內聯函式?2 為什麼要引入內聯函式?3 為什麼inline能取代巨集?4 內聯函式和巨集的區別?5 什麼時候用內聯函式?6 如何使用內聯函式?7 內聯函式的優缺點?8 如何禁止函式進行內聯?9 注意事項 1 什麼是內聯函式?內聯函式是指那些定義在類體內的成員函式,即該函式的函式體放在類體內...