0

重複の可能性:
C++ では、ヘッダー ファイルと cpp ファイルがあるのはなぜですか?
C++ - .h ファイルには何を入れる必要がありますか?

通常 .cpp ファイルで定義されるすべての関数/メソッドは、.h ファイルでインラインで定義できます。では、そもそも .cpp を使用する理由は何ですか? 有効性?コンパイル時間?

.h に保存できるものと .cpp に保存するものについて、いくつかの基準はありますか?

ありがとうございました。

4

3 に答える 3

3

に関連する

この質問あれ

基本的に、すべてのコードを .h または .cpp ファイルに入れても、コンパイラはすべてのファイルをコンパイルできます。それらを分離することには基本的な利点があります

  1. つまり、可視性と再利用性のためにインターフェイスを実装から分離したいと考えています。
  2. コンパイル時間を短縮します
  3. 3dparty ライブラリのヘッダー ファイルを使用している場合、実際にはその実装については気にしませんが、呼び出す関数シグネチャについては気にします。
  4. 独自のライブラリを util ライブラリとして提供する場合、使用する人々にはヘッダー ファイルのみを提供し、ライブラリを開発したい人々にはソース ライブラリを提供します。今の私の心
于 2012-09-20T12:36:01.350 に答える
2

すべてをインライン化することはできません。オブジェクトは一度だけ定義できます。クラスとテンプレートのみを複数回定義でき、インライン化では関数の再定義のみが可能です。

たとえば、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;

リンカは、オブジェクトを一意化する方法を理解する必要があります。

于 2012-09-20T12:37:14.757 に答える
2
  • コンパイル時間を短縮します。定義がすべてヘッダー ファイルにある場合、そのヘッダー ファイルが変更されるたびに、そのヘッダー ファイルを含むすべてのファイルをコンパイルする必要があります。
  • 実装からインターフェイスを非表示にします。ヘッダーとライブラリを出荷できるようにします。
于 2012-09-20T12:35:49.867 に答える