C 內聯函式 以「嵌入」代替「呼叫」

2021-08-22 11:49:01 字數 1167 閱讀 2482

【概念介紹】

內聯函式是c++為提高程式執行速度而做的一項改進。

首先了解**執行的原理:

編譯——產生可執行檔案(裡面全是二進位制機器指令)

執行——將二進位制機器指令載入到記憶體,每個函式有自己的記憶體位置。呼叫函式時,程式將跳轉到另乙個位址(函式位址),呼叫完函式之後再跳轉回去。在記憶體中來回跳躍需要一定的開銷。

內聯——在編譯時,將內聯函式的二進位制**直接嵌入到呼叫的地方。好處是不需要跳轉,速度快;壞處是占用更多的記憶體。(如果程式在10個不同的地方呼叫同乙個內聯函式,則該程式將包含函式的

10個二進位制副本。)

所以,內聯適合函式體短小呼叫次數多的函式。

【使用方法】

①加上關鍵字inline

②將整個定義寫在宣告的地方(如果函式體有多行,說明可能函式體太長,不適合內聯)

inline

intsquare(

intx)

【注意事項】

①程式設計師請求inline,但編譯器不一定會實行,有可能編譯器注意到函式太長

②遞迴的函式不能內聯(編譯時無法得知呼叫多少次,所以不知道要嵌入多少份)

【內聯與巨集】c++的內聯功能遠勝於c的巨集定義

//內聯函式

inline

intsquare(

intx)

//巨集定義函式

#define

square

(x) x*x

內聯函式使用上與函式一樣,巨集定義則只是簡單的替換,如:

square(12)

正常

square(v1 + v2)

v1 + v2 * v1 + v2運算次序錯誤

square(a++)

a++ * a++自增了兩次

如果使用c語言的巨集實現了類似函式的功能,應考慮將其轉為c++。

C 類常函式以及內聯函式

1。請將下列 在2008vc環境下編譯執行。date 20091109 for class const function and inline function book qianneng page 276 572 include include using namespace std class ...

虛函式以及c 成員函式的呼叫原理

class base11 virtual int get public int m i class subclass public base11 virtual int get public int m j int main base11 p 0 subclass q p q int fun nul...

C 內聯函式

1 什麼是內聯函式?內聯函式就是小型函式,犧牲空間來節省函式呼叫的開銷,一般用作比較小的函式,即函式內部沒有迴圈 開關語句等。內聯函式被發明出來就是為了取代c中的巨集,因為巨集是單純的替換而沒有型別檢查所以經常出毛病,2 為什麼要引入內聯函式?當然,引入內聯函式的主要目的是 解決程式中函式呼叫的效率...