10

私は頻繁にC++で大きな非テンプレートクラスに遭遇します。そこでは、単純なメソッドが実装ファイルで個別にではなく、ヘッダーファイルのクラス本体で直接定義されています。例えば:

class Foo {
  int getBar() const { return bar; }
  ...
};

なぜこれをするのですか?不利な点があるようです。実装は本来あるべきほど隠されておらず、コードは読みにくく、クラスのヘッダーファイルが多くの異なる場所にインクルードされている場合はコンパイラーの負担も大きくなります。

私の推測では、人々はこれらの関数を他のモジュールにインライン化することを意図していると思います。これにより、パフォーマンスが大幅に向上する可能性があります。ただし、新しいコンパイラは、モジュール間のリンク時にインライン化(​​およびその他の手続き間の最適化)を実行できると聞いています。この種のリンク時間最適化のサポートはどの程度広く、実際にこの種の定義は不要になりますか?これらの定義に他の正当な理由はありますか?

4

3 に答える 3

14

C ++標準では、クラス定義内で定義されたメソッドはinlineデフォルトであるとされています。これにより、ゲッターやセッターなどの単純な関数のパフォーマンスが明らかに向上します。リンク時のモジュール間最適化は困難ですが、一部のコンパイラーはそれを実行できます。

于 2008-11-05T21:53:49.633 に答える
7

多くの場合、簡単で時間を節約できるという理由以外に理由はありません。また、ヘッダー ファイルで同じ数の行を使用する一方で、実装ファイルの混乱も少し解消されます。また、getter や setter などに限定されている場合、可読性が低下することは非常に困難です。

于 2008-11-05T21:59:30.090 に答える
2

あなたはあなた自身の質問に答えました、それらは確かにインラインメソッドです。

それらを使用する理由はパフォーマンスです。

于 2008-11-05T21:52:32.197 に答える