クラス定義内に関数定義を置くと、デフォルトではインライン関数として扱われます。つまり、呼び出し元には、関数本体がコピーされる可能性があります。定義を変更すると、再コンパイルしない限り、呼び出し元には古い定義が含まれます。
は、あなたがその定義クラスのヘッダーファイルにない機能を変更した場合は、発信者を再コンパイルする必要はありません、あなたはちょうどそれらを再リンクする必要がFunction declaration inside or outside the class
を参照してください。これはクラス定義の変更とは見なされないので、リップマンの本の引用は当てはまりません。これを見て
簡単な方法は、クラスのコードが.o
ファイルにコンパイルさ.cpp
ファイルになりながら、クラス定義は、.h
ファイルであるべきであるということです。 .h
ファイルを変更する場合は、<include filename.h>
を含むものをすべて再コンパイルする必要があります。 .cpp
ファイルに変更を加えた場合は、.o
ファイルを再コンパイルし、それを使用する実行可能ファイルを再リンクします。アプリケーションビルドツール(Unixのmake
など)は自動的にこれを処理する必要があります。
あなたの質問はあまり意味がありません。 (変更されたすべてのコードと共に)クラス定義を再コンパイルする必要があります。そのすべては明白で自動です。 – xyious
@xyious、クラスを使用するユーザーコードについて質問しています。クラスのソースコードではありません。 –
C++ビルド・ツールは非常に簡単な依存性チェックを使用しますが、ソース・ファイルのタイムスタンプのみを参照します。したがって、インライン関数定義を使用しないで* .hファイルの宣言と.cppファイルの実装を使用する場合、このような変更によって他のソースファイルが再構築されることはありません。 –