C++ 內聯函數詳解

一、C++ 內聯函數

1.內聯

C 語言中有宏函數的概念。宏函數的特點是內嵌到調用代碼中去,避免瞭函數調用的開銷。但是由於宏函數的處理發生在預處理階段,缺失瞭語法檢測和有可能帶來的語意差錯。

2.語法

C++提供瞭 inline 關鍵字,實現瞭真正的內嵌。

宏函數 VS inline函數

#include <iostream>
#include <string.h>
using namespace std;
//優點:內嵌代碼,辟免壓棧與出棧的開銷
//缺點: 代碼替換,易使生成代碼體積變大,易產生邏輯錯誤,無類型檢查
#define SQR(x) ((x)*(x))
//優點:高度抽象,避免重復開發,類型檢查
//缺點: 壓棧與出棧,帶來開銷
inline int sqr(int x)
{
	return (x)*(x);
}
int main()
{
	int i=0;
	while(i<5)
	{
		printf("%d\n",SQR(i++));
		printf("%d\n",i);
		printf("%d\n",sqr(i++));
		printf("%d\n",i);
	}	
	return 0;
}

輸出結果

3.評價

引入內聯函數的目的是為瞭解決程序中函數調用的效率問題,這麼說吧,程序在編譯器編譯的時候,編譯器將程序中出現的內聯函數的調用表達式用內聯函數的函數體進行替換,而對於其他的函數,都是在運行時候才被替代。這其實就是個空間代價換時間的i節省。所以內聯函數一般都是1-5行的小函數。在使用內聯函數時要留神:

1.在內聯函數內不允許使用循環語句和開關語句;

2.內聯函數的定義必須出現在內聯函數第一次調用之前;

3.類結構中所在的類說明內部定義的函數是內聯函數;

總結

本篇文章就到這裡瞭,希望能夠給你帶來幫助,也希望您能夠多多關註WalkonNet的更多內容!

推薦閱讀: