行內函式(Inline function)


函式簡介 中的範例,有一個pow2()函式:
int pow2(int num) {
    return num*num;
}

在呼叫函式時會需要分配記憶空間因而需要額外的資源負擔,像pow2()這樣的小函式,可以「建議」編譯器將之設定為「行內函式」(Inline function),如果建議被採納,則該函式會自動在呼叫點展現為程式碼,行內函式建議可以直接定義於表頭檔案中,例如:
  • math.h
inline int pow2(int);
int pow(int, int);

配合表頭檔案,您可以如下實作 pow()函式本體:
  • math.cpp
#include "math.h"

inline int pow2(int num) {
return num*num;
}

int pow(int n, int p) {
int r = 1;

for(int i = 0; i < p; i++)
r *= n;

return r;
}

至於範例主函式則不變,如下所示:
  • main.cpp
#include <iostream>
#include "math.h"
using namespace std;

int main() {
int num = 0;
int power = 0;

cout << "輸入數值:";
cin >> num;

cout << "輸入平方:";
cin >> power;

cout << num << "平方:"
<< pow2(num) << endl;
cout << num << "的" << power << "次方:"
<< pow(num, power)
<< endl;

return 0;
}

行內函式只能建議編譯器,也就是說建議並不一定會被採納,這視您的編譯器而定,像是使用到goto、static變數、迴圈、switch等等,這些編譯 器可能不接受行內函式的建議,遞迴函式也無法在呼叫點展開,一個數千行的函式也不適合在呼叫點展開,如果編譯器拒絕將函式展開,它會將該函式視為一般函式 進行編譯,inline的建議會被忽略。