在使用 C++ 中的标准字符串类时。您是否需要同时拥有#include<string>
头文件和源文件?
你不能#include<string>
只在头文件上吗?
包含在头文件中可能表示类定义级别的依赖关系(例如,您正在接受或返回字符串)。在这种情况下,您必须将包含放在标题中;但是,如果您只在实现中使用字符串,则可能只需要包含在源文件中。
最佳实践是在每个需要它的头文件或源文件中单独包含一个头文件。
通过其他头文件间接包含所需的头文件会给您带来一个缺点,即当您在将来某个时候从源文件中提取包含的头文件时,您可能会因为缺少(间接包含的)头文件而导致编译错误。
文件包含是通过将 include 指令替换为包含的头文件的内容来完成的(实际上,它可能不是通过文本流中的替换来完成,而是通过语义等效的操作来完成)。
这意味着包含在标题中的所有文件都将包含在包含该标题的文件中,所以不,您不需要包含它两次。
也就是说,包含文件的策略有很多,选择一个更多的是您关注的内容和最佳实践,而不是您需要做的事情。
例如,您可以在使用这些文件中定义的符号时力求完整性并包含文件。
我还使用过一个项目(低级、跨平台的 C 库),其中客户端代码负责在包含头文件之前明确包含头文件依赖项。这样做是为了保持标头依赖项明确,并消除/最小化(尽可能)库对客户端施加的隐藏依赖项限制。
最后,这取决于您(和/或您的团队)。