#include标头在哪里?

The*_*red 5 c++ header include libraries

我查找了头文件示例,但只能找到没有要包含的简单文件.

所以我的问题是我#include喜欢stringvector哪里一样?在.h或.cpp文件中?或者两者兼而有之?

Mar*_* A. 7

您需要的任何地方

如果需要在头文件中声明的内容,请将它们包含在.h文件中.否则只在.cpp文件中.

请注意,包含.h文件只是一个文本替换,并且包含的​​.h文件的内容将完全插入包含它们的文件的开头.在线的精确点#include.最好在标准库之前包含项目所有标头,如果不需要,则不要包含标头.

您应该记住的最后一件事是,当处理包含许多翻译单元共享的.h文件中的许多标题的大型项目时,如果标题被修改,则会增加编译时间.通常首选在适当的文件中包含您严格要求的内容(.cpp或.h).预编译的标题也可能有所帮助,但它与您的问题无关.

最后:不要依赖"这个标题已被包含在其他地方,我已经通过第二个标题包含它了",因为它可以渲染依赖关系 - 在项目增长时难以跟踪并支持循环依赖关系.

  • 另外,要尽可能强制实施正确的包含:始终首先包含属于实现文件的标头. (4认同)
  • 两条评论:首先,我经常看到包含的相反顺序(除了实现文件的标题,总是第一个):标准库和系统标题,然后是外部库,最后是程序中的其他库.(但我不知道为什么.我想不出任何真正的理由更喜欢一个订单而不是另一个订单.)其次,通常有一个例外,不依赖于标题中的包含:允许实现文件依赖于包含在自己的标题中. (2认同)