C ++包含结构

时间:2013-07-14 03:59:30

标签: c++ include standards guard

我想知道在包含头文件时应遵循的标准。如果这些地方使用这样的头文件,在相关位置重新包含头文件是一个好习惯吗? 例如,

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

现在,在你的“myclass.h”中你也包含了iostream,因为在你的班级里你使用了std :: ostream。

如果你现在回顾一下,main在技术上包括iostream两次,因为它本身包含它,它也包含在“myclass”(主要包括)中。 我可以想出有一个很好的理由,有一个不好的理由,我想知道哪种方法可以解决这个问题。

  1. 保持两个包含并让包含警卫完成他们的工作。如果您在“myclass”中更改了实现并删除了iostream include,那么您的main将不会中断,因为它明确包含iostream。
  2. 只保留“myclass”中的include并将其从main中删除,以便有一个iostream包含(并改善编译时间?),修复在“myclass”中更改实现时出现的任何错误移除iostream包括它们出现。
  3. 我更倾向于第一个解决方案,但同样,我还不太了解C ++标准。 谢谢, -Francisco

2 个答案:

答案 0 :(得分:2)

将包含保留在两个文件中,让包含警卫完成工作。

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

答案 1 :(得分:0)

通常,尝试最小化头文件中包含的数量是一种好习惯。每个包括将包含的文件与包含文件耦合。在你使用iostream的情况下,它不是世界末日,因为iostream不会经常改变。您应该检查pImpl习语,它有助于将接口与其实现分离。如果必须在标题中包含文件,则使标题自足。不要求班级用户知道每个班级都需要哪些包含。