inline 內聯函式

2021-09-26 11:02:51 字數 1042 閱讀 3763

一、內聯函式

將函式定義為內聯函式,就是將它在編譯時,在呼叫點「內聯地」 展開。

內聯函式可以避免函式呼叫的開銷,是以空間換時間。

inline關鍵字必須和函式定義放在一起才可以實現內聯,僅僅將inline放在函式宣告之前不起任何作用。inline是乙個用於實現的關鍵字而不是乙個用於宣告的關鍵字。對於類方法,定義在類體內部的方法自動成為內聯方法

inline const string & shorteststring(const string &s1, const string &s2)

int main()

二、編譯時,呼叫點展開

inline const string & shorteststring(const string &s1, const string &s2)

int main()

三、內聯使用場合

內聯函式用於優化規模較小、流程直接、頻繁呼叫的函式。因為當函式較小時,呼叫函式的時間與函式執行的時間相比佔比較大。

很多編譯器不支援 內聯遞迴函式

四、和巨集的對比

(1)展開時期

巨集預編譯時展開,inline函式的定義應該放在標頭檔案中,inline成員函式應該與類定義放在同乙個檔案中

內聯編譯時展開。

(2)型別檢查、型別替換

內聯函式會進行引數型別檢查、引數型別轉換等。盡量用 const / enum / inline 替代 define 巨集定義,相比巨集定義,inline 函式有很多優點,巨集定義只是提供純粹的文字替換,而inline函式是乙個函式,可以進行前者沒有的引數型別自動轉換。

inline 內聯函式

一 inline關鍵字用來定義乙個類的內聯函式,引入它的主要原因是用它替代c中表示式形式的巨集定義。表示式形式的巨集定義一例 define expressionname var1,var2 var1 var2 var1 var2 為什麼要取代這種形式呢,且聽我道來 1 首先談一下在c中使用這種形式巨...

inline內聯函式

技術類筆試題50 都會問巨集與inline的區別,自己去找找看?1 巨集替換發生在預編譯 2 巨集函式 如果可以這麼叫的話 替換時不會檢查引數,inline函式會檢查 3 巨集一定會發生替換,inline貌似不是強制的,編譯器想不替換也沒關係 4 巨集替換時存在著一些不可避免的陷阱 參見c trap...

inline內聯函式

一 內聯函式 內聯函式是指用inline關鍵字修飾的函式 它與普通函式所不同之處只在於函式呼叫的處理。普通 函式進行呼叫時,要將程式執行權轉到被呼叫函式中,然後再返回到呼叫它的函式中 內聯函式不是在呼叫時發生執行權轉移,而是在編譯時將 函式 體 嵌入在每乙個呼叫處。編譯時類似巨集替換,使用 函式體替...