c++: 行內函數
阿新 • • 發佈:2020-08-11
目的:提高程式的執行速度。
行內函數的編譯器程式碼和其他程式程式碼“內聯”起來了。編譯器將直接使用函式的程式碼來替換函式的呼叫。程式無需跳到另一個位置執行程式碼,再跳回來。因此行內函數比一般函式的執行速度稍快,代價是需要佔用更多的記憶體。
應當有選擇地使用行內函數,除非該函式經常被呼叫。
使用行內函數,可採取下面措施之一:
- 函式宣告前加上關鍵字 inline
- 函式定義前加上關鍵字 inline
有些編譯器不一定會滿足程式設計師的請求。它可能認為申請內聯的函式過大或者注意到函式呼叫了自己(行內函數不能遞迴)
/* inline.cpp */ #include <iostream> inline double square(double x) { return x * x }; int main(){ using namespace std; double a, b; double c = 13.0; a = square(5.0); b = square(4.5 + 7.5); // 支援!行內函數也是值傳遞 c = square(c++); cout << c << "\n"; /* 輸出 a=25, b=144, c=14 */ }
c++ 的內聯功能遠勝過 c 的巨集定義。
下面是一個計算平方的巨集:
#define SQUARE(X) X*X
c 的實現是通過文字替換的方式實現的,上面的例子中只有 a 可以正常工作。當然可以加括號改進:
#define SQUARE(X) ((X)*(X))
勉強可以實現 b ,但是 c++ 仍將遞增兩次。