inline 關鍵字使用

2021-08-21 06:07:14 字數 1478 閱讀 9856

inline關鍵字是用於函式宣告或定義,可以把函式指定為內聯函式,而且關鍵字inline必須與函式定義放在一起才能使函式成為內聯,僅僅將inline放在函式宣告前是不起任何作用的。

inline的作用是什麼呢?為什麼要引入inline功能呢?簡單的講

inline的作用與 巨集定義 作用相同,但是又不盡相同,我們知道一般#define巨集定義就是直接替換功能,不管是變數還是 表示式,一般都是用巨集定義去 定義變數,如果要巨集定義表示式呢,比如:

#define expressionname(var1,var2) ((var1)+(var2))*((var1)-(var2))
首先這是合法的,但是這個也不太方便,為什麼呢?

1. c中使用define這種形式巨集定義的原因是因為,c語言是乙個效率很高的語言,這種巨集定義在形式及使用上像乙個函式,但它使用

預處理器實現,沒有了

引數壓棧,**生成

等一系列的操作,因此,效率很高,這是它在c中被使用的乙個主要原因。

2. 這種

巨集定義在形式上類似於乙個函式,但在使用它時,僅僅只是做預處理器

符號表中的簡單替換,因此它不能進行引數有效性的檢測,也就不能享受c++

編譯器嚴格型別檢查的好處,另外它的返回值也不能被強制轉換為可轉換的合適的型別,這樣,它的使用就存在著一系列的隱患和侷限性。

3. 在c++中引入了類及類的訪問控制,這樣,如果乙個操作或者說乙個

表示式涉及到類的保護成員或私有成員,你就不可能使用這種巨集定義來實現(因為無法將this

指標放在合適的位置)。

簡單的概括就是巨集定義表示式或函式 無法發揮 巨集定義最大化,為了避免這些缺點,引入了 inline,這個inline既吸收了巨集定義的優點,又擴充套件了,inline推出的目的就是消除巨集定義的缺點,同事又很好地繼承了巨集定義的優點。

inline的作用如下:

1. inline 定義的類的

內聯函式,函式的**被放入

符號表中,在使用時直接進行替換,(像巨集一樣展開),沒有了呼叫的開銷,效率也很高。

2. 很明顯,類的內聯函式也是乙個真正的函式,

編譯器在呼叫乙個內聯函式時,會首先檢查它的引數的型別,保證呼叫正確。然後進行一系列的相關檢查,就像對待任何乙個真正的函式一樣。這樣就消除了它的隱患和侷限性。

3. inline 可以作為某個

類的成員函式,當然就可以在其中使用所在類的保護成員及私有成員。

在使用inline時,有些地方需要注意:

1.inline說明對編譯器來說只是一種建議,編譯器可以忽略這個建議的,比如,你將乙個長達100多行的函式指定為inline,編譯器就會自動忽略這個inline,將這個函式還原成普通函式。

2.在呼叫內聯函式時,要保證內聯函式的定義讓編譯器看到,也就是說,內聯函式inline必須要定義在標頭檔案中,這與通常的函式定義是不一樣的。

inline關鍵字 簡述

inline關鍵字 inline 內聯 函式 將普通的函式定義為inline函式,可以避免普通函式入棧出棧的開銷,它是將函式內的 直接貼上到呼叫處。除此之外,它和普通函式無其他區別。在函式宣告或定義中函式返回型別前加上關鍵字inline,即可以把函式指定為內聯函式。內聯函式的宣告和內聯函式的函式體的...

C 關鍵字之inline

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

關鍵字inline的作用

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