C++ でインライン関数を実行する方法について混乱しています....
この関数を言ってみましょう。どのようにインライン関数に変換されますか
int maximum( int x, int y, int z )
{
int max = x;
if ( y > max )
max = y;
if ( z > max )
max = z;
return max;
}
C++ でインライン関数を実行する方法について混乱しています....
この関数を言ってみましょう。どのようにインライン関数に変換されますか
int maximum( int x, int y, int z )
{
int max = x;
if ( y > max )
max = y;
if ( z > max )
max = z;
return max;
}
インライン関数にするには、次の 2 つのことを行う必要があります。
inline
。Neilsの回答を実際の回答として投稿するには:
inline int maximum(int x, int y, int z)
....
他の人が言ったように、キーワードを使用してinline
、関数をインライン化することをコンパイラーに伝えることができます。しかし、inline
キーワードは単なるコンパイラヒントです。コンパイラは、必要に応じて要求を無視することができ、無視することもできます。
別の方法は、関数を関数テンプレートにすることです。これは、インラインで吹き飛ばされることがよくあります。
template<class Val>
Val maximum( Val x, Val y, Val z )
{
Val max = x;
if ( y > max )
max = y;
if ( z > max )
max = z;
return max;
}
その関数定義が定義内にある場合class {}
、それはすでに自動的にインライン化されています。
そうでなければ、他の人が言うように、前に置きinline
ます。
関数をインラインにするには、inline キーワードを使用します。
inline int maximum( int x, int y, int z ) // note the inline keyword
{
int max = x;
if ( y > max )
max = y;
if ( z > max )
max = z;
return max;
}
関数がクラス/構造体のメンバーである場合、クラス内で定義するだけで (クラス外ではなく) インラインになります。
電話がかかってきたとしましょう:
int f = maximum(3, 4, 5)
コンパイラは、呼び出しを次のように展開する場合があります。
int max = x;
if ( y > max )
max = y;
if ( z > max )
max = z;
int z = max;
関数の呼び出しには多少のオーバーヘッドがあるため、インライン関数を使用すると、関数の利便性と C マクロのパフォーマンスが得られます。しかし、常にそれらを使用する必要があると言っているわけではありません。ほとんどの場合、このような最適化がいつ必要になるかを判断するのはコンパイラの方が優れており、要求を受け入れないことさえあります。
C++ FAQ LiteおよびこのGotWで、インライン関数とその使用方法 (および使用時期) について詳しく読むことができます。
inline
関数コードが参照されているすべての場所にコピーされるようにコンパイラーに指示するだけで、コードが少し速くなります (関数呼び出しのオーバーヘッドはありません) が、大きくなります (コードがコピーされます)。 このページはより詳細です。