0

C++ でインライン関数を実行する方法について混乱しています....

この関数を言ってみましょう。どのようにインライン関数に変換されますか

int maximum( int x, int y, int z )
{
   int max = x;
   if ( y > max )
      max = y;
   if ( z > max )
      max = z;
   return max;
}   
4

6 に答える 6

8

インライン関数にするには、次の 2 つのことを行う必要があります。

  1. keyword を使用してインラインで宣言しますinline
  2. この関数の定義が、それが使用されるすべての翻訳単位で可視であることを確認してください。これは通常、関数の定義全体をヘッダー ファイルに入れる必要があることを意味します。
于 2010-04-29T16:46:34.077 に答える
4

Neilsの回答を実際の回答として投稿するには:

inline int maximum(int x, int y, int z)
....
于 2010-04-29T16:38:20.747 に答える
4

他の人が言ったように、キーワードを使用して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;
}   
于 2010-04-29T16:48:28.037 に答える
3

その関数定義が定義内にある場合class {}、それはすでに自動的にインライン化されています。

そうでなければ、他の人が言うように、前に置きinlineます。

于 2010-04-29T16:42:57.393 に答える
2

関数をインラインにするには、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で、インライン関数とその使用方法 (および使用時期) について詳しく読むことができます。

于 2010-04-29T16:47:10.047 に答える
1

inline関数コードが参照されているすべての場所にコピーされるようにコンパイラーに指示するだけで、コードが少し速くなります (関数呼び出しのオーバーヘッドはありません) が、大きくなります (コードがコピーされます)。 このページはより詳細です。

于 2010-04-29T16:39:46.740 に答える