为什么指定这些C++标头包含<initializer_list>?

Bri*_*ian 15 c++ initializer-list

/sf/answers/1863048911/可以看出,标准保证以下标题#include <initializer_list>:

  • [容器]中的所有东西
  • <utility>
  • <string>
  • <algorithm>
  • <random>
  • <valarray>
  • <regex>

这些头文件中的大多数都声明了至少一个带std::initializer_list<E>参数的函数,所以它是有意义的.然而,

  • <array>,<stack>并且<queue>没有这样的功能,尽管在这里统一处理所有容器也许是有意义的.
  • <utility> 没有这样的功能.
  • <iterator>确实有一个带initializer_list参数(rbegin,rend)的函数,但它没有指定包含<initializer_list>.

这些例外背后的理由是什么?

Bo *_*son 1

似乎没有明确的理由,只是提出了一些对标准进行补充的提案并且这些提案被接受了。

在文件N2672 Initializer List 提议的措辞的最后,它只是说:

在 20.2 实用程序组件[实用程序]第 1 段中:

本小节包含一些在库的其余部分中使用的基本函数和类模板。

标题<utility>概要

     #include<initializer_list>
      namespace std {
Run Code Online (Sandbox Code Playgroud)

因此,该论文的作者将其视为initializer_list实用程序,因此应该将其包含在<utility>标题中。确实如此。

该论文没有建议对<iterator>标题进行任何更改,因此没有进行任何更改。