.cpp文件而不是.h文件?翻译单位是否受到影响? .h文件和.cpp文件中都需要它,我应该将它包含在.h文件中吗?这有关系吗? stdafx.h)中,例如std和第三方库,这是一个好习惯吗?我自己的文件怎么样,我应该在stdafx.h创建它们的过程中将它们包含在文件中? // myClass.h
#include <string>
// ^-------- should I include it here? --------
class myClass{
myClass();
~myClass();
int calculation()
};
// myClass.cpp
#include "myClass.h"
#include <string>
// ^-------- or maybe here? --------
[..]
int myClass::calculation(){
std::string someString = "Hello World";
return someString.length();
}
// stdafx.h
#include <string.h>
// ^--------- or perhaps here, and then include stdafx.h everywhere? -------
Run Code Online (Sandbox Code Playgroud)
Bjö*_*lex 25
cpp只在-file中包含它.正如@Pedro d'Aquino所评论的那样,你可以尽可能使用前向声明来减少标题中包含的数量(基本上每当你只使用对给定类型的引用或指针时).这篇关于Header文件包含模式的文章应该对你有所帮助.
- 是否有一些首选方式来组织包含指令?
是的,您可以在上面的文章中找到它们.
- 是否更好地在.cpp文件中包含所需的文件而不是.h文件?翻译单位是否受到影响?
是的,最好将它们放在.cpp中.即使如果在另一种类型的定义中需要定义类型,也可以使用前向声明.
- 如果我在.h文件和.cpp文件中都需要它,我应该将它包含在.h文件中吗?这有关系吗?
仅在.h文件中,但建议在头文件中转发声明,并包含在.cpp文件中.
- 将已定义的文件保存在预编译的头文件(stdafx.h)中,例如std和第三方库是一种好的做法吗?我自己的文件怎么样,我应该在创建它们的过程中将它们包含在stdafx.h文件中?
我个人没有使用过预编译的头文件,但之前在Stackoverflow上已经讨论过它们:
是否有一些首选方式来组织包含指令?
没有共同的惯例.有人建议对它们进行字母排序,我个人不喜欢它,并且更喜欢将它们保持逻辑分组.
是否更好地在.cpp文件中包含所需的文件而不是.h文件?
一般来说,是的.它减少了编译器打开和读取头文件的次数,只是为了查看那里的包含保护.这可能会缩短整体编译时间.有时也建议在头文件中尽可能多地转发声明类,并且实际上只在.cpp中包含它们,原因相同.例如,"Qt人"这样做.
翻译单位是否受到影响?
从语义上讲,没有.
如果我在.h文件和.cpp文件中都需要它,我应该将它包含在.h文件中吗?这有关系吗?
只需将其包含在标题中即可.
将已定义的文件保存在预编译的头文件(stdafx.h)中,例如std和第三方库是一种好的做法吗?我自己的文件怎么样,我应该在创建它们的过程中将它们包含在stdafx.h文件中?
预编译头可以显着减少编译时间.例如:我的一个项目包括boost::spirit::qiPCH开启20秒内的编译,以及80秒内的编译 - 没有.一般来说,如果你使用一些大量模板填充的库boost,你会想要利用PCH的优势.
至于代码示例中的问题:由于您不在标头中使用std :: string,最好将其包含在.cpp文件中.这是正常的,以#include <string>在stdafx.h太-但是这只会增加复杂性的一点点你的项目,你会发现几乎没有任何编译加速.