プロジェクトのすべてのコード ファイルに、list や vector などのいくつかの STL ヘッダーを含めています。インクルード ガードを使用する必要がある独自のヘッダーを知っていますが、このシナリオでは、それらが私によって定義されていない場合はどうでしょうか?
すべてのファイルに同じヘッダーを含めるのは悪いことですか? 含まれるたびにパフォーマンスが低下しますか?
プロジェクトのすべてのコード ファイルに、list や vector などのいくつかの STL ヘッダーを含めています。インクルード ガードを使用する必要がある独自のヘッダーを知っていますが、このシナリオでは、それらが私によって定義されていない場合はどうでしょうか?
すべてのファイルに同じヘッダーを含めるのは悪いことですか? 含まれるたびにパフォーマンスが低下しますか?
パフォーマンスコストはありません。標準ヘッダーには独自のインクルード ガードがあり、すべてのインクルード ガードはプリプロセッサによって最適化されるため、ファイルが毎回実際にリロードされることはありません。
正確性と保守性は常に最初の関心事です...ファイルを再配置して「未定義の識別子」エラーが発生したり、さらに悪い場合に修正に費やした作業を補うために、コンパイル時間をどれだけ節約する必要がありますか!
編集:すべてのヘッダー ファイルから同じ標準ヘッダーを含めて乗算するパフォーマンス コストはありません。ソース ファイルから追加の標準ヘッダーを含めるには、パフォーマンス コストがいくらかかかります。質問は少しあいまいですが、いずれにしても、C++ コンパイルの非常にコストのかかる部分は通常、テキストの解析ではなく、テンプレートのインスタンス化です。
原則として、
ソース ファイルで必要な場合にのみヘッダー ファイルを含める必要があります。
インクルードガードは、同じヘッダーファイルが同じ翻訳単位に複数回含まれるのを防ぎ、リンクエラーから保護しますが、もちろん標準ライブラリヘッダーには独自のものがあります。
ただし、ヘッダファイルを必要としないソースファイルに含めると、コンパイルが増えて名前空間名の汚染が発生する可能性があることに注意してください。