インライン関数
inline
キーワードは関数指定子であり、すべての関数呼び出しをその関数定義内のコードに置き換えるようコンパイラに指示します。
注釈
インライン コードを置き換えるかどうかは、コンパイラの判断で行われます。 たとえば、関数のアドレスが取得されている場合、または、関数が大きすぎてインライン展開できない場合、関数はインライン展開されません。 コンパイラがヘッダー ファイルで定義された関数をインライン化しない場合、1 定義規則 (ODR) 違反を避けるためにリンカー向けにマークされます。
関数をインライン化の候補と見なされるようにするには、戻り値の型と任意のパラメーター型を宣言するシグネチャを持つ新しいスタイルの関数定義を使う必要があります。
インライン関数を指定するには、この形式を使用します。
inline
function-definition
インライン関数は、同等の関数呼び出しよりも高速で小さいコードを生成します。
インライン関数は、引数と戻り値のためにスタックを準備するために必要な時間と、関数呼び出しのジャンプとリターンを実行する時間を節約します。
何度か繰り返される場合でも、引数と戻り値を処理するコードが生成されないため、小さなインライン関数 (およそ 3 行以下) であれば、同等の関数呼び出しよりも生成されるコードが小さくなります。
コンパイラは、通常の関数には使われない方法で、インライン生成された関数を最適化できます。 コンパイラは通常、異なるプロシージャ間で最適化を行いません。
inline
を使う関数とインライン アセンブラー コードを混同しないでください。 インライン アセンブラーの詳細については、「インライン アセンブラー」を参照してください。
Microsoft 固有の仕様
Microsoft では、すべての関数呼び出しをその関数定義内のコードに置き換えるようコンパイラに指示する、__inline
および __forceinline
キーワードもサポートされています。 __inline
キーワードは inline
の同意語です。 __forceinline
キーワードは、関数をインライン化するかどうかについてヒューリスティックを緩和するようコンパイラに指示しますが、関数がインライン化されることを保証するものではありません。
以前のバージョンとの互換性を確保するため、_inline
と _forceinline
は、コンパイラ オプション /Za
(言語拡張機能の無効化) が指定されていない限り、それぞれ __inline
と __forceinline
の同意語です。
Microsoft 固有の仕様の終了