內聯函數

內聯函數就是小型函數,犧牲空間來節省函數調用的開銷,一般用作比較小的函數,即函數內部沒有循環、開關語句等。內聯函數被髮明出來就是爲了取代C中的宏,因爲宏是單純的替換而沒有類型檢查所以經常出毛病,比如:

#define MAX(a, b) (a) > (b) ? (a) : (b)

如果你在代碼中這樣寫:

int a = 5, b = 10;

// int max = MAX(++a, b); // a自增了兩次
// int max = MAX(++a, b+10); // a自增了一次

a的自增次數竟然由與其比較的數字的大小來決定!?這肯定不是你想要的結果。

所以最好的辦法是這樣:
template <class T>
inline T max(const T& t1, const T& t2)
{
return t1 > t2 ? t1 : t2;
}

這樣的話如果你這樣寫:

int max = max(a, b);
其實就被替換爲了:
int max = a > b ? a : b;
雖然看起來宏差不多,但是比宏多了類型檢查,而且內聯函數使用的是真正的函數的特性,而不是宏的function-like,模擬函數的功用。

內聯函數是爲頻繁使用、並且過程不大的小型函數設計的,我說了它是以犧牲代碼空間來節省函數調用的開銷,內聯函數使用不當就會造成代碼膨脹,所以使用它一定要小心。
發佈了28 篇原創文章 · 獲贊 7 · 訪問量 13萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章