Visual c++ 在使用预编译头文件时,是否仍应在需要时包含头文件?

Visual c++ 在使用预编译头文件时,是否仍应在需要时包含头文件?,visual-c++,Visual C++,我想这是一个关于风格而不是正确性的问题 使用VisualStudio 2012,我发现,使用Windows、H、DICT3D11、ATLBASE和任何标准C++头文件的预编译头文件,如果我不使用它们,我的项目将大大加快。该项目大量使用windows,因此根本不需要将任何东西移植到该项目的其他操作系统或编译器 我的问题是,我真的应该在#include“Precomp.h”之后包含头文件吗。他们当然不会做任何事情,因为他们有一次标题保护或#pragma,但他们会帮助记录依赖关系 那么in.h文件呢?

我想这是一个关于风格而不是正确性的问题

使用VisualStudio 2012,我发现,使用Windows、H、DICT3D11、ATLBASE和任何标准C++头文件的预编译头文件,如果我不使用它们,我的项目将大大加快。该项目大量使用windows,因此根本不需要将任何东西移植到该项目的其他操作系统或编译器

我的问题是,我真的应该在
#include“Precomp.h”
之后包含头文件吗。他们当然不会做任何事情,因为他们有一次标题保护或#pragma,但他们会帮助记录依赖关系

那么in.h文件呢?我不能在其中包含预编译的头文件,但为了使.h文件自包含,我总是包括,例如,如果它使用了其中的任何内容。但这是不必要的,因为包含此.h文件的.cpp文件将始终在使用它的.h文件之前包含“Precomp.h”文件

所以这并不是关于正确性,而是关于理解和可维护性的最佳风格


在这种情况下,预编译头的“最佳实践”是什么?

经验法则非常简单:只使用永不更改的头。因此,您只会得到一次缓慢的编译,而不会再次得到


这使得SDK和编译器头成为一个简单的选择。你自己的标题,不是很多。然后,第二条经验法则适用:您是否有自己的标题,应该“包含在所有地方”?它们是否真的足够大,足以产生明显的速度差异?这几乎总是两个打击,希望无论如何。

我只使用预编译头作为系统和编译器头。问题是我是否将Test.h包含在我自己的Test.h中,因为它使用了其中的某些内容,还是仅仅依赖于包含Test.h的任何内容,这些内容已经从预编译头中包含了它。通常,使.h文件自包含是很好的,但在这种情况下,我知道预编译的头文件将始终包含在内。