4.5インライン関数
Q 1:inlineキーワード
•inlineリクエストが受信されたかどうかについて
•inlineキーワードはリクエストです.このリクエストが受信された場合、コンパイラは、この関数を1つの式で合理的に拡張できると考えなければなりません.
•この妥当性は、このインライン関数の実行コストが一般的な関数呼び出しおよび戻りメカニズムによる負荷よりも低いことに現れます(コンパイラ内部に測定方法があります).
•1つのinline関数を処理するには2つの段階があります
Q 2:実際のパラメータがインライン関数に与える影響
•次のインライン関数を例に挙げます。
inline int min(int i, int j)
{
return i < j ? i : j;
}
以下のいくつかの呼び出し方法について説明します.
int foo();
int bar();
int main()
{
int minval;
int val1 = 1024;
int val2 = 2048;
/*(1)*/ minval = min(foo(), bar() + 1);
/*(2)*/ minval = min(1024, 2048);
/*(1)*/ minval = min(val1, val2);
return 0;
}
•実相は副作用のある表現
説明:実パラメータが副作用のある式の場合、一時オブジェクトを導入する必要があります.上記(1)のように、評価を繰り返すことを避けるために一時オブジェクトをインポートする必要があります.次のようにします.
int t1;
int t2;
minval = (t1 = foo()), (t2 = bar() + 1), t1 < t2 ? t1 : t2;
•実パラメトリック定数式
説明:置換前に評価操作を完了する必要があります.後続のインライン置換では、定数を直接対応する位置にバンドルできます.上記(2)のように定数を直接バインドすることができる.次のようにします.
minval = 1024;
•実パラメータは、副作用式でも定数式でもありません
この時点で直接置換すればよい
*注意:インライン関数のローカル変数は、一時的なオブジェクトを生成し、インライン関数の変換と呼び出しのオーバーヘッドを増加させます.