質問
C ++でインライン関数を実行する方法について混乱しています。
この関数を言ってみましょう。インライン関数にどのように変わりますか
int maximum( int x, int y, int z )
{
int max = x;
if ( y > max )
max = y;
if ( z > max )
max = z;
return max;
}
解決
他の人が言ったように、あなたはそれを使うことができます 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;
}
他のヒント
それをインライン関数に変えるには、2つのことをする必要があります。
- キーワードを使用してインラインで宣言します
inline
. - を確認してください 意味 この関数は、使用されているすべての翻訳ユニットに表示されます。これは通常、関数の定義全体をヘッダーファイルに配置する必要があることを意味します。
ニールを投稿するには、実際の答えとして回答します。
inline int maximum(int x, int y, int z)
....
その関数定義がa内に表示される場合 class {}
定義は、すでに自動的にインラインです。
そうでなければ、他の人が言うように、置いてください 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
コンパイラに、紹介されているすべての場所でコピーされた関数コードが必要であることを伝えます。コードを少し高速にします(関数呼び出しのオーバーヘッドなし)が大きく(コードがコピーされます)。 このページはより深くなっています。