4

私がコードを持っている場合main.cpp、定義されたクラスが必要であると言って、必要なすべてのライブラリ/ヘッダーをファイルmyheader.hに含めるのは悪い習慣ですか?main.cppmyheader.h

もしそうなら、なぜですか?main.cppそれがどうしようもないことを考えるとmyheader.h

この質問が少し単純な場合は申し訳ありません-複数のファイルを分離する一般的な方法がわかりません。

4

2 に答える 2

7

一般に、現在のファイルに必要なものだけを含める必要があります。OK、とにかくmain.cpp使用するので、必要なヘッダーを含めたり、他のヘッダーをmyheader.h含めたりしないのはなぜですか? 明日は、不要なヘッダーやに含まれる他のヘッダーを含める必要があるため、冗長でコンパイル時間が長くなります。したがって、 に必要なものはすべてに含めます。<iostream>myheader.hmain.cppmyheader.hmyOthercpp.cpp<iostream>myheader.hmain.cppmain.cpp

このパターンには、プリコンパイル済みヘッダーと呼ばれる例外があります。

于 2012-04-26T09:38:10.053 に答える
0

例外はありますが、通常、ヘッダー内にヘッダーを含めないことをお勧めします。

コンパイル速度

たとえば、大きなライブラリbiglibrary.cpp/biglibrary.hがある場合

大きなライブラリに依存して作業を行うクラスmyclass.h/myclass.cpp

そして、MyClassに依存するいくつかのコード--main.cpp


main.cppはbiglibraryに依存しません。それについて何も知る必要はありません。myclass.hにのみ依存します。myclass.hにbiglibrary.hが含まれている場合、main.cppをコンパイルするよりもbiglibrary.hを解析する必要があり、コンパイルが遅くなります。

循環依存

もう1つの問題は、循環依存です。2つのクラスA、Bがあるとします。AはBを参照し、BはAを参照します。

ahをbhに含めますか、それともbhをahに含めますか

よりクリーンな解決策は、必要なヘッダーをソースファイルに含めることです。

ヘッダー内のコードが存在しないクラスへの参照を必要とする場合は、次のように前方減速を使用します: http: //www.eventhelix.com/realtimemantra/headerfileincludepatterns.htm

于 2012-04-26T09:54:10.980 に答える