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

Why are these C++ headers specified to include <initializer_list>?

本文关键字:lt initializer list gt 包括 C++ 为什么      更新时间:2023-10-16

从 https://stackoverflow.com/a/26614984/481267 可以看出,以下标头由标准保证#include <initializer_list>

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

这些标头中的大多数都声明至少一个接受std::initializer_list<E>参数的函数,因此这是有意义的。然而

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

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

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

在文档N2672初始值设定项列表建议的措辞的最后,它只是说:

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

此子子句包含一些基本的函数和类模板,这些模板在库的其余部分使用。

标题<utility>概要

     #include<initializer_list>
      namespace std {

因此,该论文的作者将initializer_list视为一种实用程序,因此它应该包含在<utility>标题中。因此是这样。

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