1、內聯函數的概念
在函數說明前冠以關鍵字inline
的函數。列如:
inline int func(int x,int y);
2、編譯器是如何對待內聯函數的?
每當程序中出現對該函數的調用時,編譯器編譯時,就會將該函數的函數體全部插入到調用該函數的語句處,同時實參取代形參,於是程序運行時就不在進行函數調用。
實列說明:
#include<iostream>
using namespace std;
inline int box(int x, int y)
{
return x*y;
}
int main()
{
int a;
a=box(4, 5);
cout << a << endl;
}
解析:
由於定義函數時,將box
函數定義爲內聯函數,所以編譯時在遇到調用函數box(4,5)
時,就用box
函數體來代替box(4,5)
,同時實參取代形參。這樣就變成了
int main()
{
int a;
a=4*5;
cout << a << endl;
}
3、作用
內聯函數是一種空間換時間的做法,能夠提高程序運行的效率。
4、注意事項
1、內聯函數不建議聲明和定義分離,分離會導致鏈接錯誤。因爲inline被展開,就沒有函數地址了,鏈接就會找 不到。
2、內聯函數在第一次被調用之前必須進行完整的定義。
3、一般不包含複雜的語句。如循環語句、遞歸語句。
4、通常只有規模很小(1~5句)而且使用頻繁的函數才定義爲內聯函數。