1

以下に簡単な例を示します。.hpp ファイルは、使用するすべてのものをインクルードまたは前方宣言する必要があることを知っています。.cpp ファイルでも使用されるすべての .hpp ファイルをインクルードするのがベスト プラクティスであるかどうか疑問に思います。私が取り組んでいる新しいプロジェクトで最近見たので、これを尋ねています。多くの場合、人々はヘッダーを含めることを避ける傾向があります。

この場合: b.hpp を a.cpp に含めるのは良いことですか? .hpp をインクルードすることで既にインクルードされていることは知っていますが、個人的には、シンボルが .cpp に表示される場合はインクルード (または、可能であれば前方宣言) する必要があると感じています。

a.hpp

#pragma once
#include "b.hpp"

class C; //forward declaration of C

class A
{
public:
    B get_b();
private:
    B  _b;
    C* _c;
};

a.cpp

#include "a.hpp"
//needed or I can leave it out, since B is included already in a.hpp?
#include "b.hpp"

B A::get_b()
{
    return _b;
}
4

2 に答える 2

1

どのファイルを .cpp (および .hpp) に含めるかに関して、2 つの主な懸念事項があります。

1) コンパイル時間: インクルードの数を減らしてコンパイル時間を短縮する

大まかに: 使用するクラス データ/関数メンバーまたはインライン関数/テンプレートを含むファイルのみを含めます。クラスのみを参照する場合、前方宣言は、インクルード ファイル全体よりもはるかに高速にコンパイルされます。

2) 脆弱性: 必要なものを含むインクルード ファイルに依存しない

a.hpp に b.hpp が含まれていて、b.hpp で定義された何かが必​​要な場合 (上記を参照)、a.hpp の実装者が a.hpp の要求を停止すると、コードが壊れます。

これはすべて決定論的なものであり、それを正しく行うために努力する必要があります

于 2013-11-14T21:06:03.767 に答える