首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >最佳实践: c++头包括

最佳实践: c++头包括
EN

Stack Overflow用户
提问于 2013-06-11 13:49:30
回答 4查看 3.3K关注 1票数 3

我现在正在学习C++,我想我很了解关于包含标题的大部分知识。来自于根本没有必要这样做的语言,我常常觉得“这是错误的”,或者应该有一个更简单的方法来做到这一点:

  1. 我发现在我想要使用向量的每一个类中包括(例如)“向量”都是非常烦人的。有更好的办法吗?
  2. 我有大量的核心功能(也在它的单独的名称空间中),有相当多的类不经常改变。虽然我不需要每个类中的所有功能,但是最好只有一个头文件,包括它并完成它.做这件事最好的方法是什么?
  3. 在预编译的头文件中包含标头是错误的做法吗?如果是,为什么?
EN

回答 4

Stack Overflow用户

回答已采纳

发布于 2013-06-11 14:03:02

1.我发现在我想使用向量的每一个类中包括(例如)是非常烦人的。有更好的办法吗?

想象一下,对于使用您的代码的其他人(另一个可能是,您未来的自我)来说,这是多么的烦人,并得到一个编译错误,因为<vector>缺少一个标头。写一次,多用一遍。

2.我有大量的核心功能(也在它的单独名称空间中),有相当多的类不经常变化。虽然我不需要每个类中的所有功能,但是最好只有一个头文件,包括它并完成它.做这件事最好的方法是什么?

如果您允许IDE自动将其作为预编译头包含进来,则可以这样做以加快速度。但是,就正确性和可移植性而言,您不应该依赖它,而且总是让每个标头都可以作为独立的标头编译。参见亚历山大斯库&萨特氏编码标准中的第23项。像CMake这样的构建系统甚至有宏来测试。

3.在预编译的头文件中包含标头是一种错误的做法吗?如果是,为什么?

您可以这样做,但最好让IDE这样做,以便获得更好的可移植性。并且这些头最好是稳定的(标准库或Boost,例如,但绝不是您自己的项目标题)。

票数 1
EN

Stack Overflow用户

发布于 2013-06-11 14:01:11

你认为你所需要的,在你需要的地方#include是“错误的”很可能来自--至少部分--你的偏见来自于没有必要的其他语言。

在C++中,驱动许多范例的哲学是:“你不为你不使用或不需要的东西付费。”此清单的一种方式是需要#include为您正在编写的组件所需的任何头。没有什么是#include自动编辑的。

有一些现成的捷径可以让这件事变得更简单。这样的快捷方式之一就是使用所谓的预编译头,即全局标头,它本身就是#include,所有在全球范围内使用的低级别的东西都在您的项目中使用。您可以在任何需要它的文件中编写这样的头和#include,而不是#include处理几个(或几十个)单独的文件。

“你不用花钱买你不使用的东西”哲学的好处之一是在编译时收获。如果您只需要3个小的头文件,那么#include只需要这三个文件,而不是几十个不必要的cruft,就会加快编译时间。

票数 3
EN

Stack Overflow用户

发布于 2013-06-11 13:57:02

  1. 一般情况下不是,但也有例外。更重要的是,您不应该依赖包含在包含的h文件中,但有时您可以这样做。例如,在派生类中,您可以很大程度上依赖基的包含。
  2. 做出你自己的包括,其中只包括一堆其他的包括。但小心点。
  3. 这是一个很好的做法,因为巨大的包括,不经常改变。在posix系统上,这也不是很普遍的做法。
票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/17045818

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档