next up previous
Next: 関数引数のデフォルト値 Up: ススンデルCとしてのC++ Previous: 参照(リファレンス)

インライン関数

小規模な関数で,関数呼び出しのオーバーヘッドを気にする場合には, 関数をマクロとして記述することがある.標準入出力ライブラリの getchar()putchar()などもマクロだ. マクロを使う場合,例えば次のような記述になる.

#define transpose(a) { ¥
  int z; z = (a).x; ¥
  (a).x = (a).y; ¥
  (a).y = z; ¥
}

しかし,マクロを使う 場合,次のような問題がある.

インライン関数は,マクロではなく普通の関数だが,それが呼ばれた時点で C++コンパイラがマクロと同じように展開してくれるので,関数呼び出し のオーバーヘッドを気にしなくてよい.インライン展開を指定するには, 予約語inlineを使う.gif
inline void transpose(vector2D& a) 
{
    int z; 
    z = a.x; a.x = a.y; a.y = z; 
}
複数のファイルで同じインライン関数を使う場合には, マクロと同じように,ヘッダファイルに関数を記述する.また, 前述のように,構造体定義の中でメンバ関数の本体を定義すると, そのメンバ関数はインライン展開の対象となる.



Akinori ITO
Thu Aug 7 15:05:13 JST 1997