重複の可能性:
C++ では、ヘッダー ファイルと cpp ファイルがあるのはなぜですか?
C++ - .h ファイルには何を入れる必要がありますか?
通常 .cpp ファイルで定義されるすべての関数/メソッドは、.h ファイルでインラインで定義できます。では、そもそも .cpp を使用する理由は何ですか? 有効性?コンパイル時間?
.h に保存できるものと .cpp に保存するものについて、いくつかの基準はありますか?
ありがとうございました。
重複の可能性:
C++ では、ヘッダー ファイルと cpp ファイルがあるのはなぜですか?
C++ - .h ファイルには何を入れる必要がありますか?
通常 .cpp ファイルで定義されるすべての関数/メソッドは、.h ファイルでインラインで定義できます。では、そもそも .cpp を使用する理由は何ですか? 有効性?コンパイル時間?
.h に保存できるものと .cpp に保存するものについて、いくつかの基準はありますか?
ありがとうございました。
に関連する
基本的に、すべてのコードを .h または .cpp ファイルに入れても、コンパイラはすべてのファイルをコンパイルできます。それらを分離することには基本的な利点があります
すべてをインライン化することはできません。オブジェクトは一度だけ定義できます。クラスとテンプレートのみを複数回定義でき、インライン化では関数の再定義のみが可能です。
たとえば、header.hppについて考えてみます。
extern int a;
struct Foo { static int b; };
以下は、専用の単一の翻訳ユニットに入れる必要があります。
#include "header.hpp"
int a;
int Foo::b;
一方、クラステンプレートの静的メンバーは、ヘッダーにとどまることができ、実際にとどまる必要があります。
template <typename T> struct Foo { static int x; };
template <typename T> int Foo<T>::x;
リンカは、オブジェクトを一意化する方法を理解する必要があります。