1

我想知道在包含头文件时应该遵循什么标准。如果这些地方使用此类头文件,那么在相关位置重新包含头文件是否是一种好习惯?例如,

假设您有一个包含 iostream 的 main.cpp 类和一个自定义类“myclass.h”,因为您在 main 中同时使用了 std::ostream 和 myclass 的实例。

现在,在您的“myclass.h”中,您还包括 iostream,因为在您的类中您使用 std::ostream。

如果现在回头看,main 在技术上是两次包含 iostream,因为它本身包含它,并且它也包含在“myclass”(其中 main 包含)中。我可以想到一个很好的理由和一个不好的理由,我想知道哪种方法是正确的。

  1. 保留两个包含并让包含守卫完成他们的工作。如果您更改了“myclass”中的实现并删除了 iostream 包含,您的 main 不会中断,因为它明确包含 iostream。
  2. 只保留“myclass”中的包含并将其从 main 中删除,以便拥有单个 iostream 包含(并缩短编译时间?),修复在“myclass”中更改实现时出现的任何错误并删除 iostream当他们出现时包括在内。

我更倾向于第一个解决方案,但同样,我还不太了解 C++ 标准。谢谢,-弗朗西斯科

4

2 回答 2

2

将包含保留在两个文件中,并让包含守卫完成他们的工作。

如果您依赖“间接”包含,如果您稍后更改您的“myclass.h”并想知道为什么您的 std::ostream 在 main.cpp 中将不再工作,那么可能会出现错误。也可能会让其他人感到困惑

于 2013-07-14T04:03:00.987 回答
0

一般来说,最好尽量减少头文件中包含的包含数量。每个包含将包含文件与包含文件耦合。在您使用 iostream 的情况下,这并不是世界末日,因为 iostream 不会经常更改。您应该检查有助于将接口与其实现分离的 pImpl 习惯用法。如果您必须在标题中包含文件,则使标题自给自足。不要要求您的班级的用户知道您的每个班级都需要哪些内容。

于 2013-07-14T04:09:55.047 回答