2

で C++ クラスを.h定義し、そのメソッドを で定義します.cppが、コードが整理されていないように見えます。

ファイル内のクラス定義にすべてのメソッドの定義を入れたいのですが.h、1 つのクラス ヘッダー ファイルが別のファイルにインクルードされると、コンパイラが同じメソッド/関数に対して重複したコードを生成するのが心配です。

リンカーは重複したコード部分を見つけてマージし、ファイル サイズを縮小しますか?

そうでない場合は、.hpp代わりに使用する方が良いですか? aはこれだと聞き.hppました。

そして、G ++でコンパイルされた(理由はわかりません).hファイルを変更するだけでも、わずかな違いがあります。.hpp

4

5 に答える 5

3

はい。これ、より大きな実行可能ファイルを作成する可能性があります。これは、定義でキーワードに言及するかどうかに関係なく、クラス自体で定義されるメンバー関数がinline デフォルトinlineであるためです。通常、inline関数は、コンパイラがどこから呼び出されても複数回定義するため、実行可能ファイルが大きくなります。

于 2012-04-14T17:43:39.613 に答える
2

.h vs .hppは、の90%の同等性です

#include <cmath> vs  #include <math.h>

一部の人々.hppは、排他的なC++プログラミングを行っているときに使用することを好みます。.hppのようなライブラリに表示されますBoost

ただし、残りの10%は非常に重要です。たとえば、図書館のドキュメントから、 overBoostを使用する理由を説明しています。.hpp.h

ほとんどのBoostライブラリはヘッダーのみです。テンプレートとインライン関数を含むヘッダーファイルで完全に構成されており、リンク時に個別にコンパイルされたライブラリバイナリや特別な処理は必要ありません。

その場合は、を使用する必要があります.hppが、コンパイル時間が長くなる可能性があります。.hそれ以外の場合は、スタイルを維持することをお勧めします。それは私の個人的な好みです。C-oriented私の正直な意見では、それはまったくありません。

参考文献:

テンプレート化されたC++クラスを.hpp/.cppファイルに分割する-それは可能ですか?

宣言と実装をHPPファイルに凝縮する

C ++テンプレートは.hで宣言し、.hppで定義します

于 2012-04-14T17:50:21.687 に答える
0

ここに必要なものはすべてあります。ヘッダーファイル、すべてのコードをそれらに入れることの長所と短所。それが役に立てば幸い!

ヘッダーファイルを使用すると、コンパイル時間が短縮され、実行可能ファイルが小さくなります。また、.h宣言を確認することでクラスの概要をすばやく確認できるため、かなりきれいに見えます。

于 2012-04-14T17:42:38.793 に答える
0

心配することは何もありません。それがどのように分割されるかはまったく違いはありません。ファイルの記述が大きくなるのは、その記述がどのように広がるかではありません。

.hまたは.hppも違いはありません。

于 2012-04-14T17:42:48.243 に答える
0

より大きな実行可能ファイルについての質問に答えるには、はい、実行可能ファイルが大きくなります。ソース ファイルまたはヘッダー ファイルにヘッダー ファイルを #include すると、プリプロセッサは #include をヘッダー ファイルの内容に置き換えます。これが、次のヘッダー保護でヘッダー ファイルを保護する必要がある理由です。

#ifndef HDR_H
#define HDR_H

...

#endif

ただし、ヘッダー ファイル (関数定義を含む) を同じ実行可能ファイルの一部である複数のファイルに含めると、リンカー エラーが発生します。クラスと関数の定義と宣言を、それぞれ .cpp ファイルと .hpp ファイルに分割することをお勧めします。これにより、リンカーの頭痛の量が大幅に削減されます。

また、.h = .hpp です。どちらを選んでも構いません。個人の好み...

于 2012-04-14T18:11:29.990 に答える