【C++】深入理解“內聯與巨集”
阿新 • • 發佈:2019-01-05
行內函數
內聯程式碼,程式無需跳到另一個位置執行程式碼,再跳回來。因此,行內函數執行速度比常規函式稍快,但代價是需要佔用更多記憶體。
所以應該有選擇性的使用行內函數,如果函式執行程式碼的時間比處理函式呼叫的 時間長,則即使使用行內函數,節省也沒啥明顯改進,而如果程式碼執行時間很短,則行內函數呼叫就可以節省大部分呼叫所佔的時間。
如何使用?
- 在函式宣告前加上關鍵字 inline
- 在函式定義前加上關鍵字 inline
然而
程式設計師要求使用行內函數是,編譯器不一定會滿足這種要求。它很可能認為函式過大或者認為呼叫了自己(不能遞迴!), 而有的是編譯器就沒有這個功能
那麼巨集和內聯有什麼區別呢?
inline工具是C++新增的特性
C語言使用前處理器語句#define來提供巨集--行內函數的原始實現
舉例子:
#define square(x) x*x
巨集並不是傳遞引數,而是傳遞文字替換,x僅僅是“引數”的符號標記
a=square(5.0); // 替換 a=5.0*5.0;
b=square(4.5+7.5); // 替換 b = 4.5+7.5 * 4.5 +7.5 ;
c=square(C++); //替換 c = C++*C++ ;
如果確實想使用這個巨集?怎麼辦?
#define square(x) ((x)*(x))
然而,使用新定義後仍在某些情況下存在問題!請大家務必注意!