C 內聯 inline 函式

2022-09-17 22:39:19 字數 1347 閱讀 6041

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

在c/c++中,為了解決一些頻繁呼叫的小函式大量消耗棧空間的問題,特別的引入了inline修飾符,表示為內聯函式。內聯函式實質是在呼叫點將函式展開,從而減少了對堆疊的操作(在堆疊中呼叫函式較為複雜,直接展開為**執行效率更高)。

內聯函式犧牲了空間但是降低了呼叫函式時的額外開銷,以空間換時間,在大部分情況下時值得的。

在class之外,多乙個inline修飾符。

class a    

/*...*/}/*

如果在類中未給出成員函式定義,而又想內聯該函式的話,那在類外要加上inline,否則就認為不是內聯的

*/inline int a::add(int x,int y)

inline int add1(int x,int y)

在class之內定義的函式是自動內聯的。

class a    

/*...*/

}

inline說明對編譯器來說只是一種建議,編譯器可以選擇忽略這個建議。對於過大的函式,編譯器會忽略inline。

關鍵字inline 必須與函式定義體放在一起才能使函式成為內聯,僅將inline 放在函式宣告前面不起任何作用,inline函式實質上是一種宣告,最好直接將內聯函式定義一起放在.**件中。

**短小(例如只有2、3行)且多次呼叫。

若函式較大或有遞迴呼叫(recursive functions)則不使用inline。

巨集巨集呼叫是通過簡單文字替換來實現的,不會對引數進行型別檢查。

巨集的使用是預處理器直接對巨集**進行呼叫,沒有引數壓棧、生成相應彙編**、返回引數等時間花費。

巨集可能會產生意想不到的邊緣效應,很容易出錯,要非常小心優先順序的變動。

內聯inline 對編譯器來說是一種請求,而不是命令。

c++中的內聯機制既具備巨集**的效率,又增加了安全性,可以自由操作類的資料成員,而巨集**無法操作類的私有成員。

例如對於下面**

#include#define add1(x,y)	((x)+(y)) //巨集定義

using namespace std;

inline int add2(int x,int y)

int main()

得到結果

0//巨集沒有對型別檢測

3//inline進行了強制型別轉化

因而建議在c++中用inline函式代替巨集函式

inline函式 C 內聯函式 inline

inline要起作用,必須要與函式定義放在一起,而不是函式的宣告 inline 當編譯器處理呼叫內聯函式的語句時,不會將該語句編譯成函式呼叫的指令,而是直接將整個函式體的 插人呼叫語句處,就像整個函式體在呼叫處被重寫了一遍一樣,在執行時是順序執行,而不會進行跳轉。優點 內聯函式沒有執行函式呼叫的開銷...

C 內聯函式 inline

巨集 就是使用乙個字串來代替乙個表示式 或函式呼叫 編譯之前,預處理器會使用這個巨集字串所代表的表示式 或函式呼叫 來替換所有出現的巨集字串,這樣的話,用巨集表示的函式呼叫 就不用另外開闢函式棧,不用保護和恢復函式呼叫現場,這樣就提高了 的執行效率 所以,呼叫乙個巨集比呼叫乙個函式更有效 但是呼叫巨...

c 內聯函式inline

1.inline原理 在程式編譯時,編譯器將程式中出現的內聯函式的呼叫表示式用內聯函式的函式體來進行替代。採用空間換時間的策略。是以 膨脹 複製 為代價,僅僅省去了函式呼叫的開銷,從而提高函式的執行效率。例如 如果乙個函式被指定為inline函式,則它將在程式中每個呼叫點上被展開。int i 10 ...