1. 程式人生 > >內聯函數與#define的區別

內聯函數與#define的區別

用處 fine 使用 del inline 修飾 安全 很多 編譯

  內聯函數從源代碼層看,有函數的結構,而在編譯後,卻不具備函數的性質。內聯函數不是在調用時發生控制轉移,而是在編譯時將函數體嵌入在每一個調用處。編譯時,類似宏替換,使用函數體替換調用處的函數名。一般在代碼中用inline修飾,但是能否形成內聯函數,需要看編譯器對該函數定義的具體處理。

內聯函數使用註意要點:

1.在內斂函數內不允許用循環語句和開關語句。若有則編譯器將該函數視為普通函數那樣產生函數調用代碼,遞歸函數(自己調用自己)是不能作為內斂函數的。內聯函數只適用於1——5行的小函數。對於含有很多語句的大函數,函數調用和返回的開銷相對於來說微不足道,所以沒不要用內聯函數。

2.內聯函數的定義必須出現在內聯函數第一次被調用之前。


內聯函數看似與#define類似,但他們之間有幾點不同。

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

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

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

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

內聯函數與#define的區別