C 內聯函式 Inline 介紹(2)

2021-04-17 14:15:11 字數 1029 閱讀 2445

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

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

下面我們來看乙個例子:

#include  

#include  

using

namespace std; 

inline

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

void

main() 

cin.get(); 

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

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

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

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

關於內聯函式的更多例子我就不一一舉出了,靈活的使用也多靠學習者本身,我只在此拋磚引玉,讓大家盡可能多的學習到c++中的一些新的先進的特性知識點

C 內聯函式 Inline 介紹

介紹內聯函式之前,有必要介紹一下預處理巨集。內聯函式的功能和預處理巨集的功能相似。相信大家都用過預處理巨集,我們會經常定義一些巨集,如 define table comp x x 0?x 0 就定義了乙個巨集。為什麼要使用巨集呢?因為函式的呼叫必須要將 程式執行的順序轉移到函式所存放在記憶體中的某個...

C 內聯函式 Inline 介紹

2001 11 12 杜瑾 yesky 介紹內聯函式之前,有必要介紹一下預處理巨集。內聯函式的功能和預處理巨集的功能相似。相信大家都用過預處理巨集,我們會經常定義一些巨集,如 define table comp x x 0?x 0 就定義了乙個巨集。為什麼要使用巨集呢?因為函式的呼叫必須要將程式執行...

C 內聯函式 Inline 介紹

介紹內聯函式之前,有必要介紹一下預處理巨集。內聯函式的功能和預處理巨集的功能相似。相信大家都用過預處理巨集,我們會經常定義一些巨集,如 define table comp x x 0?x 0 就定義了乙個巨集。為什麼要使用巨集呢?因為函式的呼叫必須要將程式執行的順序轉移到函式所存放在記憶體中的某個位...