1

プロジェクト内のすべてのソースファイルで使用されるプリコンパイル済みヘッダーstdafx.hがあります。したがって、stdafx.hのすべてのヘッダーは、プロジェクトのすべてのコードファイルで使用できます。

私が確信していないのは、プリコンパイル済みヘッダーにすでに含まれているものを再含めるかどうかです。皆さんはどう思いますか?

例えば

stdafx.h

#pragma once

#include <memory>

my_class.h

#pragma once

#include <memory> // Re-include or not that's the question. Best practice?

struct my_class
{
};
typedef std::shared_ptr<my_class> my_class_ptr;

main.cpp

#include "stdafx.h"
#include "my_class.h"

int main()
{
}
4

3 に答える 3

3

stdafx.hが異なるプロジェクトでヘッダーを再利用できるように、これを含めます。これを示す別の方法は、各ヘッダーに、それ自体で必要なすべての宣言(できれば前方の宣言)が含まれている必要があることです。

内部ヘッダーガード(またはVSの場合はヘッダーファイルの#pragma:once)が原因でヘッダーの内容が処理されないため、パフォーマンスに影響はありません。

于 2010-09-11T13:24:07.327 に答える
1

ヘッダーには、そのヘッダーを個別に使用するために必要なすべてのものを含める必要があります。ヘッダーで使用std::shared_ptrし、そのテンプレートがヘッダーからのものである場合は、memoryヘッダーを含めますmemory

ヘッダーを設計するときの目標は、ヘッダーを完成させることです。これにより、誰かがヘッダーを含めたときに、未解決の参照によって引き起こされるエラーが発生しなくなります。一部のヘッダーが繰り返し含まれる可能性があることを心配する必要はありません。それを防ぐための他のメカニズムがあります。

ところで、ヘッダーでもこれらのメカニズム(#pragmaまたは#ifndef/など)を使用してください。#define

于 2010-09-11T13:35:06.410 に答える
1

ベストプラクティスは、可能な限り前方宣言を使用することです。不要なインクルードがあると、コンパイル時間が長くなる可能性があります。以前にインクルードされたファイルに含まれていたとしても、実装でヘッダーが使用されている場合は、常にヘッダーをファイルにインクルードしてください。このように、いつか前のファイルからヘッダーインクルードを削除する必要がある場合、このファイルでエラーが発生することはなく、ファイルを変更する必要はありません。

于 2010-09-11T13:35:19.630 に答える