天天看點

C++中的inline函數

程式員都知道,普通的函數被調用時有壓棧彈棧的操作,同時伴随着指令跳轉。這都消耗着時間和資源。如果函數本身規模很小,則這種消耗就占用了很大的比例。為解決這種問題,引入了inline函數。

注意,C++中的inline函數的連結性是内部的,這意味着函數定義必須放在使用函數的檔案中。

對于内聯函數在頭檔案中,是以在使用函數的檔案中包含頭檔案可以確定将定義放在正确的地方。

對于将函數定義放在.cpp實作檔案中,這種情況下,必須删除關鍵字inline,這樣才能保證函數的連結性是外部的。

想要使用inline函數,下面兩條至少要采取一條:

在函數聲明前加上inline;

在函數定義前加上inline;

#include <iostream>
#include <cstdlib>
using std::cout;
using std::endl;

inline bool isOdd(int iNum); //函數原形聲明為inline即:内聯函數

int main() {
	for(int i=1; i<=10; i++) {
		cout  << i << " is " << (isOdd(i)?"Odd":"Even") << endl;
	}
	std::system("pause");
	return 0;
}

//無需再次inline,當然加上inline也OK
bool isOdd(int iNum) {
	return (0 == iNum%2)?false:true;
}
           

inline函數完全避免了函數調用時的壓棧彈棧操作,提高了運作速度。

但,當函數本身過大或者存在遞歸調用時,即使聲明為inline函數,編譯器也不會滿足你的要求。

能用inline千萬别用#define,不信的話,可以傳一個 ++iNum 實參試一下。

Done!

繼續閱讀