2013-03-04 26 views
6

私は最近、たくさんの読書をしてきましたが、私は "インライン"キーワードを跨いで継承(および仮想関数)をカバーしています。現在、私はインラインが通常の意味であることを知っています。コンパイラは、関数呼び出しを正確なコードに置き換える可能性があります。しかし、継承に関して言及したことを見た回数は、継承内でインラインを使用する特別な理由がいくつかありますか?なぜそれが言及され続けているのか分かりません....継承とインライン?

継承/派生クラス/仮想関数内で、インライン関数にはどのような余分な役割がありますか?

+0

@BillyONeal私はリンクが実際に接続が正確に何かを説明しているとは思わない(もしあれば)。 – user997112

+1

もう一度....これは重複していません。私はリンクが何であるか尋ねています.....その質問は、仮想関数にインラインを置くのは無意味かどうかを尋ねています....回答を熟知している人にとって、その答えは似通っていますが、その同一性を意味する。私は答えを知りませんし、他の質問が役に立たなかったことを読んでいます。 – user997112

答えて

2

はい、仮想関数のインラインを使用するのは時間の無駄です。仮想関数は、関数ポインタからなる仮想関数テーブルを介して呼び出さなければなりません。インライン関数はポインタで呼び出すことはできません。実際の機能として存在しなければならない。

いくつかの例外があります。呼び出し元が正確なオブジェクトタイプを知っている場合、仮想関数テーブル全体をスキップすることができます。

仮想キーワードを過度に使用すると、コードが非常に遅くなる可能性があります。コンパイラが仮想関数を使用して3つまたは4つの小さな関数呼び出しをインライン化および最適化できる場合、実際の関数呼び出しを行う必要があり、呼び出し間のメモリまたはレジスタ状態についての前提はありません。