C inline內建函式

2021-06-22 07:46:55 字數 1874 閱讀 2569

呼叫函式時需要一定的時間,如果有的函式需要頻繁使用,則累計所用時間會很長,從而降低程式的執行效率。c++提供了一種提高效率的方法,即在編譯時將所呼叫的函式**嵌入到主函式中。這種嵌入到主函式中的函式被稱為內建函式(inline function),又稱為內嵌函式

指定內建函式的方法很簡單,只須在函式首行的左端加乙個關鍵字inline即可。

例:將函式指定為內建函式

#include

using namespace std;

inline int max(int a, int b, int c)

if (b>a) a=b;

if (c>a) a=c;

return a;

int main()

int i=7,j=11,k=4;

int m = max(i, j, k);

cout << "max=" << m 由於在定義函式時指定它為內建函式,因此編譯系統在遇到函式呼叫max(i,j,k)時,就用max函式體的**代替max(i,j,k),同時將實參代替形參。這樣,m=max(i,j,k)就被置換成:

a=i;

b=j;

c=k;

if (b>a) a=b;

if (c>a) a=c;

m=a;

內建函式與用#define命令實現的帶參巨集定義有些相似,但不完全相同。巨集定義是在編譯前由預處理程式對其預處理的,它只作簡單的字元置換而不作語法檢查,往往會出現意想不到的錯誤。

例:用帶參巨集定義實現求平方值。

#include

using namespace std;

#define power(x) x*x

int main()

cout << power(2) << endl;

cout << power(1+1) << endl;

// system("pause");

return 0;

本來程式是希望兩個cout語句都能輸出2的平方值,但執行結果卻是

4 (輸出power(2)的值)

3 (輸出power(1+1)的值)

第2個結果顯然不是程式設計者所希望的,原因是在進行巨集替換時只是簡單地將字元「1+1」取代x,因此power(1+1)被置換為1*1+1*1,結果為3.

如果不用#define而用內建函式,也可以達到同樣的目的,但避免了上面的***。

#include

using namespace std;

inline int power(int x)

return x*x;

int main()

cout << power(2) << endl;

cout << power(1+1) << endl;

//system("pause");

return 0;

執行結果是

4 (輸出power(2)的值)

4 (輸出power(1+1)的值)

結果顯然是正確的。用內建函式時,由於是函式呼叫,所以先求出power函式的實參的值(1+1等於2),然後再將實參賦值給形參,並且power函式的函式體代替power(1+1),這樣,power(1+1)展開為,cout輸出的是2的平方。

可以看到:用帶參巨集定義和內建函式都可以實行置換,但具體的做法不同,用內建函式可以達到用#define巨集置換的目的,但不會出現帶參巨集定義的***。顯然,內建函式優於帶參巨集定義。自從有了內建函式後,一般不再用#define帶參巨集定義了。

使用內建函式可以節省執行時間,但卻增加了目標程式的長度,假設要呼叫10次max函式,則在編譯時先後10次將max的**複製並插入main函式,大大增加了main函式的長度。因此只用於規模很小而使用頻繁的函式,可大大提高執行速度。

C inline 內聯函式

內聯函式 1 內聯函式定義和作用 將乙個函式宣告為inline,那麼函式就成為內聯函式。內聯函式通常就是它在程式中每個呼叫點上 內聯地 展開。從定義上看,內聯函式跟一般函式不一樣,一般函式呼叫的時候是需要呼叫開銷的 比如出棧入棧等操作 內聯函式從定義上看更像是巨集,但是跟巨集不一樣。內聯函式的作用主...

C inline內連函式

1.內聯函式 在c 中我們通常定義以下函式來求兩個整數的最大值 複製 如下 int max int a,int b 為這麼乙個小的操作定義乙個函式的好處有 閱讀和理解函式 max 的呼叫,要比讀一條等價的條件表示式並解釋它的含義要容易得多 如果需要做任何修改,修改函式要比找出並修改每一處等價表示式容...

C inline內聯函式探索

學過程式編譯的人知道,呼叫函式需要cpu執行引數壓棧 暫存器儲存與恢復 跳轉指令等操作,開銷比較大,高頻繁的呼叫函式對效能有影響,在c c 語言裡產生了macro巨集,由於巨集不是函式不會產生上述開銷,是一種比較好的優化,但巨集不是強型別程式設計,於是vc 產生了inline內聯函式,inline優...