c++行內函數與巨集的區別
阿新 • • 發佈:2019-02-11
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一個數