2007年09月13日

関数のインライン展開について

Effective C++を読んでのメモ

関数名の前にinlineキーワードをつけると、コンパイラ側の方で可能なら関数のインライン展開を行ってくれる関数定義の機能。もともとはC++における新機能であったが、C99によりC言語でも可能となった。たいていのコンパイラの実装では、関数内にforやwhileなどのループ文や再帰などの記述が含まれている場合、あるいはその関数のアドレスを関数ポインタ等を用いて呼び出している場合にインライン展開行わない。そのほか、クラス定義の中に書かれたコンストラクタやデストラクタは通常は非明示的にインライン関数とされる。しかしコンストラクタやデストラクタでループなどを用いていなくてもインライン展開されない可能性がある。その一つとしてコンパイラ側がコンストラクタ及びデストラクタの呼び出しに関数ポインタを用いる場合があるからだ。
なのでインライン展開を望む関数に対しinlineキーワードを用いる場合はその性質に注意する必要がある。
この記事へのコメント
コメントを書く
お名前:

メールアドレス:

ホームページアドレス:

コメント:

認証コード: [必須入力]


※画像の中の文字を半角で入力してください。

この記事へのトラックバック