內聯函數與#define的區別

  內聯函數從源代碼層看,有函數的結構,而在編譯後,卻不具有函數的性質。內聯函數不是在調用時發生控制轉移,而是在編譯時將函數體嵌入在每個調用處。編譯時,相似宏替換,使用函數體替換調用處的函數名。通常在代碼中用inline修飾,可是可否造成內聯函數,須要看編譯器對該函數定義的具體處理。安全

內聯函數使用注意要點:

1.在內斂函數內不容許用循環語句和開關語句。如有則編譯器將該函數視爲普通函數那樣產生函數調用代碼,遞歸函數(本身調用本身)是不能做爲內斂函數的。內聯函數只適用於1——5行的小函數。對於含有不少語句的大函數,函數調用和返回的開銷相對於來講微不足道,因此沒不要用內聯函數。

2.內聯函數的定義必須出如今內聯函數第一次被調用以前。函數


 

內聯函數看似與#define相似,但他們之間有幾點不一樣。調試

內聯函數於#define的區別:
(1)內聯函數在運行時可調試,而宏定義不能夠;遞歸

(2)編譯器會對內聯函數的參數類型作安全檢查或自動類型轉換(同普通函數),而宏定義則不會;   編譯器

(3)內聯函數能夠訪問類的成員變量,宏定義則不能;  編譯

4)在類中聲明同時定義的成員函數,自動轉化爲內聯函數。變量

相關文章
相關標籤/搜索