1. 程式人生 > >c++行內函數與巨集的區別

c++行內函數與巨集的區別

c++行內函數

c++行內函數與常規函式的主要區別不在於編寫方式的不同。在於c++編譯器如何將它們組合到程式中。

執行到函式呼叫指令時,程式將立即儲存該指令的記憶體地址,變將函式複製到堆疊,跳到標記函式起點

的記憶體單元,執行函式程式碼,函式體執行完後跳到地址被儲存的指令處。來回跳躍並記錄跳躍位置,需要

一定的開銷。

c++行內函數提供另外一種選擇,編譯器將使用相應的函式程式碼替換函式呼叫。程式無需跳到另外一個位置

執行程式碼,然後再跳回來。因此,行內函數的執行速度比常規函式稍快,當代價是需要佔用更多的記憶體,特別

是呼叫位置過多的時候。

所以應該有選擇的使用行內函數。建議函式體中程式碼較短時考慮使用行內函數,如求最大值,平方等等。

要使用行內函數,必須採用下述錯數之一:

  • 在函式宣告前加上關鍵字inline
  • 在函式定義前加上關鍵字inline

行內函數與巨集

巨集是內聯代表的原始實現。

內聯程式碼的引數是按值傳遞的,而巨集是通過文字替換的方式。

//如行內函數 
inline double square(double x){return x*x};
//巨集
#define square(x) x*x
//square(3.5+1.5) 內聯與巨集的結果不同。
//square(x++)   內聯與巨集的結果不同。
//只有在square(x) 是內聯與巨集的結果相同。 x一個數