inline內聯函式

2021-09-17 23:47:19 字數 1033 閱讀 2104

c 語言中有巨集函式的概念。巨集函式的特點是內嵌到呼叫**中去,避免了

函式呼叫的開銷。但是由於巨集函式的處理發生在預處理階段,缺失了語法檢測

和有可能帶來的語意差錯。

3.2.1 內聯函式基本概念

c++提供了 inline 關鍵字,實現了真正的內嵌。

特點:1)內聯函式宣告時inline關鍵字必須和函式定義結合在一起,否則編譯器會直

接忽略內聯請求

2)c++編譯器直接將函式體插入在函式呼叫的地方。

3)內聯函式沒有普通函式呼叫時的額外開銷(壓棧,跳轉,返回)。

4)內聯函式是一種特殊的函式,具有普通函式的特徵(引數檢查,返回型別

等)。5)內聯函式由編譯器處理,直接將編譯後的函式體插入呼叫的地方,

巨集**片段由預處理器處理,進行簡單的文字替換,沒有任何編譯過程。

6)c++中內聯編譯的限制:

不能存在任何形式的迴圈語句

不能存在過多的條件判斷語句

函式體不能過於龐大

不能對函式進行取址操作

函式內聯宣告必須在呼叫語句之前

7)編譯器對於內聯函式的限制並不是絕對的,內聯函式相對於普通函式的優

勢只是省去了函式呼叫時壓棧,跳轉和返回的開銷。因此,當函式體的執行開

銷遠大於壓棧,跳轉和返回所用的開銷時,那麼內聯將無意義。

3.2.2 內聯函式 vs 巨集函式

優點: 內嵌**,闢免壓棧與出棧的開銷

缺點: **替換,易使⽣生成**體積變⼤大,易產⽣生邏輯錯誤。

#define sqr(x) ((x)*(x))

優點: ⾼高度抽象,避免重複開發

缺點: 壓棧與出棧,帶來開銷

3.2.3 內聯函式總結

優點:避免呼叫時的額外開銷(入棧與出棧操作)

代價:由於內聯函式的函式體在**段中會出現多個「副本」,因此會增加**

段的空間。

本質:以犧牲**段空間為代價,提高程式的執行時間的效率。

適用場景:函式體很「小」,且被「頻繁」呼叫。

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