inline關鍵字 簡述

2021-08-09 07:42:37 字數 1166 閱讀 4123

inline關鍵字

inline(內聯)函式:

將普通的函式定義為inline函式,可以避免普通函式入棧出棧的開銷,它是將函式內的**直接貼上到呼叫處。除此之外,它和普通函式無其他區別。

在函式宣告或定義中函式返回型別前加上關鍵字inline,即可以把函式指定為內聯函式。

內聯函式的宣告和內聯函式的函式體的定義必須在一起。

要成為inline函式必須具備以下幾點: 

1、函式**很短,通過不超過10行 

2、函式內不能出現迴圈、遞迴、switch...case 

3、需要在編譯的時候開啟優化選項 ,

否則加上inline修飾,編譯器也會視而不見

inline放置的位置只要在函式的返回值的型別前面就可,如果函式又有static修飾,放在static的前後都可。

inline在不同編譯器下放置的位置導致的結果是不同的,某些編譯器如果將inline放在函式的宣告的前面是不被視為inline函式的,但大部分編譯器對放在函式宣告和函式定義的前面視為一樣。

內聯函式與巨集的區別在於:

1、巨集不是函式,而inline是函式

2、巨集在定義時要小心處理巨集引數,盡量用括號括起來,否則容易出現二義性。而內聯函式不會出現二義性。

3、內聯函式在編譯時展開,而巨集在預編譯時展開

4、巨集是由預處理器來對巨集進行替代,沒有語法檢查、型別檢查和安全檢查

5、內聯函式是通過編譯器的控制來實現的,有語法檢查、型別檢查和安全檢查

6、內聯函式是真正的函式,而且在呼叫的地方,由編譯器負責把內聯函式的函式體**塊替換到內聯函式被呼叫的地方,

而巨集只是乙個簡單的文字替換。

7、內聯函式有引數,有返回值

8、由於內聯函式可以像巨集一樣被展開,所以呼叫內聯函式的時候,取消了函式引數壓棧、出棧所帶來的開銷,從而減少了函式呼叫開銷,這就是內聯函式的優越於巨集的地方

內聯函式的侷限性:

1、由於內聯函式與巨集一樣也是實現為類似**替換,所以定義為內聯函式的函式體不宜過大,如果函式體過大,則某些普通的編譯器就會放棄內聯方式,而改用呼叫普通函式的方式,這樣就失去了內聯函式的意義了。所以,內聯函式的函式體**不宜過大,一般就是3---4行**即可。  

2、由於內聯函式是編譯器在編譯階段進行函式體展開的,所以就要把類的內聯函式的定義與實現都必須在宣告類的那個標頭檔案中,而不能放在實現類的那個cpp檔案中。

inline 關鍵字使用

inline關鍵字是用於函式宣告或定義,可以把函式指定為內聯函式,而且關鍵字inline必須與函式定義放在一起才能使函式成為內聯,僅僅將inline放在函式宣告前是不起任何作用的。inline的作用是什麼呢?為什麼要引入inline功能呢?簡單的講 inline的作用與 巨集定義 作用相同,但是又不...

C 關鍵字之inline

一般在呼叫函式時會產生該函式的棧幀結構,在棧幀結構中儲存關於該函式的引數 變數等臨時資料 另外還要儲存現場,函式返回後還要恢復現場。這些都要花費一些時間。如果有的函式需要頻繁使用,則在反覆呼叫的過程中會有很大的時間開銷,降低程式執行效率。c 提供了一種提高效率的方法,即在編譯時將所呼叫的函式的 直接...

關鍵字inline的作用

1.作為函式定義的關鍵字,說明該函式是內聯函式。內聯函式會將 塊嵌入到每個呼叫該函式的地方。內聯函式減少了函式的呼叫,使 執行的效力提高,但是會增加目標 的大小,最終會使程式的 段占有大量的記憶體。2.inline不是強制的,編譯器可以對它置之不理。例如,遞迴函式通常不會被編譯為inline函式,編...