內聯函數就是小型函數,犧牲空間來節省函數調用的開銷,一般用作比較小的函數,即函數內部沒有循環、開關語句等。內聯函數被髮明出來就是爲了取代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,模擬函數的功用。 內聯函數是爲頻繁使用、並且過程不大的小型函數設計的,我說了它是以犧牲代碼空間來節省函數調用的開銷,內聯函數使用不當就會造成代碼膨脹,所以使用它一定要小心。
內聯函數
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.