私は頻繁にC++で大きな非テンプレートクラスに遭遇します。そこでは、単純なメソッドが実装ファイルで個別にではなく、ヘッダーファイルのクラス本体で直接定義されています。例えば:
class Foo {
int getBar() const { return bar; }
...
};
なぜこれをするのですか?不利な点があるようです。実装は本来あるべきほど隠されておらず、コードは読みにくく、クラスのヘッダーファイルが多くの異なる場所にインクルードされている場合はコンパイラーの負担も大きくなります。
私の推測では、人々はこれらの関数を他のモジュールにインライン化することを意図していると思います。これにより、パフォーマンスが大幅に向上する可能性があります。ただし、新しいコンパイラは、モジュール間のリンク時にインライン化(およびその他の手続き間の最適化)を実行できると聞いています。この種のリンク時間最適化のサポートはどの程度広く、実際にこの種の定義は不要になりますか?これらの定義に他の正当な理由はありますか?