內聯函數的實質

c++內聯函數實質是編譯階段帶有 inline函數在函數調用點直接展開,以代碼膨脹的代價替換函數調用的開銷,

因此內聯函數不存在調用過程。


*****注意****

inline 修飾的函數聲明是無效的;

inline 修飾的函數只在本文件內部有效;

inline 在debug版本下無效的;

遞歸函數,循環函數不能設爲內聯函數,inline 只是建議編譯器在優化代碼;

***************

#define max(a,b) a>b ? a:b

int avg(int a,int b=10);

inline int avg(int a ,int b)
{
	return (a+b)/2;
}

int main()
{
	int tem = max(10,33)+2;
	avg(10,20);
	return 0;
}

inline內聯函數、 static 靜態函數、宏定義之間存在那些差別?

static函數有符號生成,inline函數沒有符號生成;

static函數有函數調用,inline函數沒有函數調用;

宏定義在預編譯期間進行字符替換,沒有類型檢查和安全檢查,不能調試;

內聯函數有類型檢查和安全檢查,可以調試;


發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章