關於inline的用法

2021-10-19 08:46:07 字數 1381 閱讀 5255

內聯函式

1.定義

2.內聯函式與其他函式的區別

3.使用規則

4.使用範圍

5.內聯函式與巨集的區別

6.內聯函式的優缺點

1.定義

以inline 修飾的函式叫做內聯函式,編譯時c++編譯器會在呼叫內聯函式的地方展開。它的優點是沒有函式壓棧的開銷,

內聯函式提公升程式執行的效率。

2.內聯函式與其他函式的區別

1)內聯函式是直接複製「鑲嵌」到主函式中去的,就是將內聯函式的**直接放在內聯函式的位置上,這與一般函式不同,主函式在呼叫一般函式的時候,是指令跳轉到被呼叫函式的入口位址,執行完被呼叫函式後,指令再跳轉回主函式上繼續執行後面的**;而由於內聯函式是將函式的**直接放在了函式的位置上,所以沒有指令跳轉,指令按順序執行

2)一般函式的**段只有乙份,放在記憶體中的某個位置上,當程式呼叫它是,指令就跳轉過來;當下一次程式呼叫它是,指令又跳轉過來;而內聯函式是程式中呼叫幾次內聯函式,內聯函式的**就會複製幾份放在對應的位置上

3.使用規則

一般在使用內聯函式時,必須將inline 關鍵字與定義的函式體寫在一起才可以實現內聯,如果只是在函式前面加上inlie關鍵字,是不能達到內聯的效果。舉個例子

inline

intadd

(int left,

int right)

intmain()

4.使用範圍1)inline是一種以空間換時間的做法,省去呼叫函式額開銷。所以**很長或者有迴圈/遞迴的函式不適宜使用作為內聯函式。並且被反覆呼叫時也不建議使用。

2) inline對於編譯器而言只是乙個建議,編譯器會自動優化,如果定義為inline的函式體內有迴圈/遞迴等

等,編譯器優化時會忽略掉內聯。

3) inline不建議宣告和定義分離,分離會導致鏈結錯誤。因為inline被展開,就沒有函式位址了,鏈結就會

找不到。

5.關於內聯函式與巨集的區別

巨集函式的優點就是在預處理階段就會展開,少了函式呼叫的開銷,(傳參,引數壓棧以及棧幀開銷)

舉個例子

內聯函式相對於巨集函式的不同,就是它是在編譯階段發生替換,可以解決上例中的問題。

因此在c++中巨集函式定義 換用內聯函式。

6.內聯函式的優缺點

優:避免了指令的來回跳轉,加快程式執行速度

inline用法詳解

在函式宣告或定義中函式返回型別前加上關鍵字inline即把min 指定為內聯。inline intmin int first,int secend inline是c 關鍵字,在函式宣告或定義中,函式返回型別前加上關鍵字inline,即可以把函式指定為內聯函式。這樣可以解決一些頻繁呼叫的函式大量消耗棧...

C 中的 inline 用法

內聯 只是乙個建議。編譯器會看函式的複雜程度來決定是否真正的執行內聯需求。建議內聯放在標頭檔案中?因為編譯器要隨處可見內聯函式的定義,所以把內聯函式放在標頭檔案比較方便。宣告跟定義要一致 如果在每個檔案裡都實現一次該內聯函式的話,那麼,最好保證每個定義都是一樣的,否則,將會引起未定義的行為。如果不是...

extern和inline的用法

在.c或者.cpp檔案中,可能有多個函式和變數。以main函式為例,如圖所示,定義的m,這樣在main函式裡cout extern int m 後則可以正常使用,意思就是,這個變數已經在別處定義過。extern int m 在main函式之前。同樣f函式也一樣,只不過我們只需把函式體寫在前面,無需顯...