C++インライン関数(インライン関数、内蔵関数)

1874 ワード

関数を呼び出すには、一定の時間と空間のオーバーヘッドが必要です.C++は、コンパイル時に関数呼び出しを関数体に置き換える効率を向上させる方法を提供し、C言語のマクロ展開と同様である.このような関数呼び出しに直接関数体を埋め込む関数をインライン関数(inline function)と呼び、インライン関数またはインライン関数とも呼ぶ.
インライン関数を指定する方法は簡単で、関数を定義するときにinlineキーを追加するだけです.
注:関数宣言時ではなく、関数定義時にinlineキーワードを追加します.関数宣言時にinlineキーを追加してもエラーはありませんが、効果はありません.
inline                :
inline void swap(int &a, int &b);
void swap(int &a, int &b)
{
    int temp = a;
    a = b;
    b = temp;
}
inline              :
void swap(int &a, int &b);
inline void swap(int &a, int &b)
{
    int temp = a;
    a = b;
    b = temp;
}

インライン関数を使用すると、関数呼び出しのオーバーヘッドを効果的に回避でき、プログラムの実行効率が向上します.インライン関数を使用する欠点は、インライン関数として宣言された関数体が非常に大きい場合、コンパイラコンパイル後のプログラムの実行可能コードが大きくなることです.
また、関数内にループや他の複雑な制御構造が発生した場合、この場合、これらの複雑な制御構造を処理するのにかかる時間は、関数呼び出しにかかる時間よりもはるかに大きいため、このような関数をインライン関数として宣言することは意味がなく、コンパイル後に実行可能なコードが長くなる.
通常、プログラム設計の過程で、頻繁に呼び出される短い関数をインライン関数として宣言します.
説明:関数をinline宣言するのは、プログラマがコンパイルシステムに対して提案しただけです.つまり、命令的ではなく、提案的です.inlineとして指定されると、コンパイルシステムはそうしなければなりません.コンパイルシステムは、状況に応じてそうするかどうかを決定します.
完全な例:
#include <iostream>
using namespace std;
int max(int, int, int); //    ,      inline
int main( )
{
   int i=10, j=20, k=30, m;
   m = max(i, j, k);
   cout<<"max="<<m<<endl;
   return 0;
}
inline int max(int a, int b, int c) //  max     
{
   if(b>a) a=b;
   if(c>a) a=c;
   return a;
}

実行結果:
max=30
関数を定義するときに組み込み関数として指定するため、コンパイルシステムは、関数呼び出し「max(i,j,k)」に遭遇すると、max関数体のコードを「max(i,j,k)」の代わりに使用し、同時に実パラメータをパラメータの代わりに使用する.
このように、プログラム6行目「m=max(i,j,k);」次のように置き換えられます.
    if (j>i) i=j;
    if(k>i) i=k;
    m=i;