クラスの宣言と定義を分離せずに、クラス定義をヘッダー ファイルに配置した場合、この定義コードは、そのヘッダーを含むすべてのソース ファイルに対して再コンパイルされますか?
1 に答える
3
コンパイラで何らかの形式のプリコンパイル済みヘッダー機能を使用している場合を除き、翻訳単位ごとに 1 回コンパイルされます (そこからオブジェクト ファイルが作成されます)。
通常ヘッダーに配置する複数の包含ガードは、同じ翻訳単位でのみ複数のコンパイルを回避するためにあります。ヘッダーのコンパイル結果がコンパイラのプリコンパイル済みヘッダー メカニズムによってどこかに格納されていない限り、次の変換単位でヘッダーを再度コンパイルする必要があります。
これが、C++ コードのコンパイルが C コードよりも大幅に遅くなる傾向がある理由の 1 つであり、前方宣言を適切に使用して不要な#include
ステートメントを避けることが重要である理由の 1 つです。ヘッダー全体を含めるのではなく、前方宣言を使用するだけでビルド時間が半分に短縮されるケースを見てきました。
于 2012-12-01T16:48:04.303 に答える