C++ C++;包含结构

C++ C++;包含结构,c++,include,standards,guard,C++,Include,Standards,Guard,我想知道在包含头文件时应该遵循什么标准。如果相关位置使用头文件,则在这些位置重新包含头文件是否是一种良好的做法? 比如说, 假设您有一个main.cpp类,其中包括iostream和一个自定义类“myclass.h”,因为您在main中同时使用std::ostream和myclass的实例 现在,在“myclass.h”中还包括iostream,因为在类中使用std::ostream 现在回顾一下,main在技术上包括iostream两次,因为它本身就包含iostream,而且它也包含在“myc

我想知道在包含头文件时应该遵循什么标准。如果相关位置使用头文件,则在这些位置重新包含头文件是否是一种良好的做法? 比如说,

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

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

现在回顾一下,main在技术上包括iostream两次,因为它本身就包含iostream,而且它也包含在“myclass”中(main包括iostream)。 我可以想出一个好的理由,一个坏的理由,我想知道这是正确的做法

  • 保留两个包含,并让包含守卫完成他们的工作。如果您在“myclass”中更改了实现并删除了iostream include,您的main将不会中断,因为它显式地包含iostream
  • 在“myclass”中只保留include并将其从main中删除,因为只有一个iostream include(并提高编译时间?),如果在“myclass”中更改实现,请修复出现的任何错误,并在出现时删除iostream include
  • 我倾向于第一个解决方案,但我不知道C++标准还不错。 谢谢
    -Francisco

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


    如果您依赖于“间接”包含,那么如果您以后更改“myclass.h”并想知道为什么std::ostream在main.cpp中不再工作,那么可能会出现错误。另外,它可能会让其他人感到困惑。一般来说,尽量减少头文件中包含的内容的数量是一种好的做法。每个include将包含的文件与包含的文件进行耦合。在使用iostream的情况下,这并不是世界末日,因为iostream不会经常更改。您应该研究pImpl习惯用法,它有助于将接口与其实现分离。如果必须在标头中包含文件,请使标头自给自足。不要要求类的用户知道每个类都需要哪些包含

    实际上,在任何大型项目中,您都会有一些间接的包含,但您仍然应该尝试。。。