C++ 包含结构

标签 c++ include standards guard

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

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

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

如果您现在回头看,main 在技术上包含了 iostream 两次,因为它本身包含了它,而且它还包含在“myclass”(main 包含)中。 我可以想出一个好的理由和一个坏的理由,我想知道哪种方法才是正确的做法。

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

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

最佳答案

将 include 保留在两个文件中,让 include guards 完成他们的工作。

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

关于C++ 包含结构,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17636393/

相关文章:

c++ - 如何为具有私有(private)成员的派生类实现 move 构造函数

c++ - 是否有任何示例代码可以从 Jpeg exif header 中读取缩略图?

python - 在 Cython 中从不同目录导入文件的正确方法

linux - 为什么要在 makefile 中包含/dev/null?

internet-explorer - Internet Explorer 8 beta 2 和标准

c++ - 一旦 std :thread makes into C++Ox,pthreads 会过时吗

javascript - 浏览器编程是否标准化,所有主要浏览器是否都符合标准?

C++类设计和按值返回

c++ move 后重新分配

c++ - #include <文件名> 和 #include "filename"有什么区别?