1. 程式人生 > >【C++】深入理解“內聯與巨集”

【C++】深入理解“內聯與巨集”

行內函數

內聯程式碼,程式無需跳到另一個位置執行程式碼,再跳回來。因此,行內函數執行速度比常規函式稍快,但代價是需要佔用更多記憶體。

所以應該有選擇性的使用行內函數,如果函式執行程式碼的時間比處理函式呼叫的 時間長,則即使使用行內函數,節省也沒啥明顯改進,而如果程式碼執行時間很短,則行內函數呼叫就可以節省大部分呼叫所佔的時間。

                                            

如何使用?

  • 在函式宣告前加上關鍵字  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))

然而,使用新定義後仍在某些情況下存在問題!請大家務必注意!