【问题标题】:Why C++ standard split container class into multiple header file?为什么 C++ 标准将容器类拆分为多个头文件?
【发布时间】:2021-11-06 05:40:44
【问题描述】:

我学习 C++ 已经有一段时间了,对它的容器使用感到困惑。如果我想使用某个容器,我必须手动将它们一一包括在内。例如,如果我想使用“vector”容器,我必须输入#include "vector",如果我稍后需要“list”容器,我必须添加#include "list"

为什么 C++ 标准不能简单地将每个容器类放在一个头文件中,例如 #include "container",这样开发人员就不用关心一一包含它们了?

【问题讨论】:

  • 这并没有解决问题,但#include <vector> 应包含标准标头,而不是#include "vector"。后者有效,但一般来说,引号用于非标准标题。
  • 如果您愿意,您可以创建一个名为 container 的文件,其中包含所有容器的 include <...>
  • 如果我只想使用向量,为什么要包含所有其他容器类型?有不少。
  • MSVC 的 C++20 将大部分放在模块 std.core 中,所以 import std.core; 在那里工作

标签: c++ stl containers standards


【解决方案1】:

为什么 C++ 标准不简单地将每个容器类放在一个头文件中,例如 #include "container",这样开发人员就不用关心一一包含它们了?

性能,特别是编译时性能。如果包含所有内容,编译器将不得不处理大量代码。如果你只使用所有内容的 1%,那么编译器正在使用的 99% 的代码对你来说都是无用的,只是浪费你的时间让编译器处理它。

【讨论】:

  • 那他们为什么要为“算法”和“迭代器”这样做?这两个头文件只是简单地包装了它们的所有内容。
  • @ArchBug 因为定义vector 所涉及的代码比定义sort 所涉及的代码多得多。其目的是在标题过多和不必要包含的代码之间取得平衡。
  • @ArchBug 虽然性能是一个大问题,但便利性也很重要。必须单独包含每个功能会过于繁重。许多算法也相互依赖,因此将它们放在一起是有意义的。有了这些容器,它们就不会相互依赖,也没有那么多,所以最好把它们分开。您也会在标准的实用程序部分看到这一点。里面有很多子组,因为不依赖其他子组,所以分成自己的头文件。
猜你喜欢
  • 1970-01-01
  • 2017-07-15
  • 1970-01-01
  • 2016-05-05
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多