1. 程式人生 > 實用技巧 >c++: 行內函數

c++: 行內函數

目的:提高程式的執行速度。

 行內函數的編譯器程式碼和其他程式程式碼“內聯”起來了。編譯器將直接使用函式的程式碼來替換函式的呼叫。程式無需跳到另一個位置執行程式碼,再跳回來。因此行內函數比一般函式的執行速度稍快,代價是需要佔用更多的記憶體。

 應當有選擇地使用行內函數,除非該函式經常被呼叫。

 使用行內函數,可採取下面措施之一:

  • 函式宣告前加上關鍵字 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++ 仍將遞增兩次。