什麼是內聯函式

2021-07-06 01:07:36 字數 1377 閱讀 5100

一、什麼叫inline函式?

inline(小心,不是online),翻譯成「內聯」或「內嵌」。意指:當編譯器發現某段**在呼叫乙個內聯函式時,它不是去呼叫該函式,而是將該函式的**,整段插入到當前位置。這樣做的好處是省去了呼叫的過程,加快程式執行速度。(函式的呼叫過程,由於有前面所說的引數入棧等操作,所以總要多占用一些時間)。這樣做的不好處:由於每當**呼叫到內聯函式,就需要在呼叫處直接插入一段該函式的**,所以程式的體積將增大。拿生活現象比喻,就像電視壞了,通過**找修理工來,你會嫌慢,於是乾脆在家裡養了乙個修理工。這樣當然是快了,不過,修理工住在你家可就要占地兒了。內聯函式並不是必須的,它只是為了提高速度而進行的一種修飾。要修飾乙個函式為內聯型,使用如下格式:

inline 函式的宣告或定義

簡單一句話,在函式宣告或定義前加乙個 inline 修飾符。

inline int max(int a, int b)

內聯函式的本質是,節省時間但是消耗空間。

二、inline函式的規則

(1)、乙個函式可以自已呼叫自已,稱為遞迴呼叫(後面講到),含有遞迴呼叫的函式不能設定為inline;

(2)、使用了複雜流程控制語句:迴圈語句和switch語句,無法設定為inline;

(3)、由於inline增加體積的特性,所以建議inline函式內的**應很短小。最好不超過5行。

(4)、inline僅做為一種「請求」,特定的情況下,編譯器將不理會inline關鍵字,而強制讓函式成為普通函式。出現這種情況,編譯器會給出警告訊息。

(5)、在你呼叫乙個內聯函式之前,這個函式一定要在之前有宣告或已定義為inline,如果在前面宣告為普通函式,而在呼叫**後面才定義為乙個inline函式,程式可以通過編譯,但該函式沒有實現inline。比如下面**片段:

//函式一開始沒有被宣告為inline:

void foo();

//然後就有**呼叫它:

foo();

//在呼叫後才有定義函式為inline:

inline void foo()

**是的foo()函式最終沒有實現inline;

(6)、為了除錯方便,在程式處於除錯階段時,所有內聯函式都不被實現。

三、使用內聯函式時應注意以下幾個問題:

(1) 在乙個檔案中定義的內聯函式不能在另乙個檔案中使用。它們通常放在標頭檔案中共享。

(2) 內聯函式應該簡潔,只有幾個語句,如果語句較多,不適合於定義為內聯函式。

(3) 內聯函式體中,不能有迴圈語句、if語句或switch語句,否則,函式定義時即使有inline關鍵字,編譯器也會把該函式作為非內聯函式處理。

(4) 內聯函式要在函式被呼叫之前宣告。關鍵字inline 必須與函式定義體放在一起才能使函式成為內聯,僅將inline 放在函式宣告前面不起任何作用。

什麼是內聯函式

類 類申明 以資料成員的方式描述資料部分,以成員函式 被稱為方法 的方式描述公有介面。類方法定義 描述如何實現類成員函式。簡單的說 類宣告提供了類的藍圖,而方法定義則提供了細節。使用類,必須了解公共介面,編寫類,必須建立公共介面。內聯函式的特殊規則要求在每個使用他們的檔案中都對其進行定義。內聯函式具...

什麼是內聯函式?

1 什麼是內聯函式?內聯函式是指那些定義在類體內的成員函式,即該函式的函式體放在類體內。2 為什麼要引入內聯函式?當然,引入內聯函式的主要目的是 解決程式中函式呼叫的效率問題。另外,前面我們講到了巨集,裡面有這麼乙個例子 define abs x x 0?x x 當 i出現時,巨集就會歪曲我們的意思...

什麼是內聯物件

我這裡把內聯物件和塊物件做了乙個比較 塊物件預設寬度是100 繼承自父元素 如果沒有採用 float left right 樣式,相鄰的兩個塊物件就會分排在不同的兩行上。內聯物件的寬度取決於其內部元素的寬度與padding樣式值之和,不可直接指定其寬度與高度 display block float ...