C 中的內聯函式inline

2021-09-01 08:51:28 字數 967 閱讀 1652

在c++中,為了解決一些頻繁呼叫的小函式大量消耗棧空間或者是叫棧記憶體的問題,特別的引入了inline修飾符,表示為內聯函式。

可能說到這裡,很多人還不明白什麼是棧空間,其實棧空間就是指放置程式的區域性資料也就是函式內資料的記憶體空間,在系統下,棧空間是有限的,如果頻繁大量的使用就會造成因棧空間不足所造成的程式出錯的問題,函式的死迴圈遞迴呼叫的最終結果就是導致棧記憶體空間枯竭。

下面我們來看乙個例子:

#include #include using namespace std;

inline string dbtest(int a); //函式原形宣告為inline即:內聯函式

void main()

cin.get(); }

string dbtest(int a)//這裡不用再次inline,當然加上inline也是不會出錯的

inline的原理 :

上面的例子就是標準的內聯函式的用法,使用inline修飾帶來的好處我們表面看不出來,其實在內部的工作就是在每個for迴圈的內部所有呼叫dbtest(i)的地方都換成了(i%2>0)?"奇":"偶"這樣就避免了頻繁呼叫函式對棧記憶體重複開闢所帶來的消耗。

inline的限制 :

說到這裡很多人可能會問,既然inline這麼好,還不如把所謂的函式都宣告成inline,嗯,這個問題是要注意的,inline的使用是有所限制的,inline只適合函式體內**簡單的函式使用,不能包含複雜的結構控制語句例如while switch,並且不能內聯函式本身不能是直接遞迴函式(自己內部還呼叫自己的函式)。

inline vs. #define :

說到這裡我們不得不說一下在c語言中廣泛被使用的#define語句,是的define的確也可以做到inline的這些工作,但是define是會產生***的,尤其是不同型別引數所導致的錯誤,由此可見inline有更強的約束性和能夠讓編譯器檢查出更多錯誤的特性,在c++中是不推薦使用define的

inline函式 C 內聯函式 inline

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

C 中的內聯函式inline

c 中使用內聯函式可以減少函式來回跳轉的次數,有效地提高程式執行的速度。但是假如函式體有很多 但是需要重複呼叫該函式很多次的話,那麼不斷地複製該函式體的 將會造成程式的增大,所以我們需要將函式的宣告和定義分開。c 中編譯器不會建立真正的函式,而只是將這個內聯函式中的所有 拷貝到呼叫函式中。語法 in...

C 中的inline內聯函式

inline 關鍵字可以只在函式定義處新增,也可以只在函式宣告處新增,也可以同時新增 但是在函式宣告處新增 inline 關鍵字是無效的,編譯器會忽略函式宣告處的 inline 關鍵字。也就是說,inline 是一種 用於實現的關鍵字 而不是一種 用於宣告的關鍵字 儘管大多數教科書中在函式宣告和函式...