为什么指定这些C++标头包括 <initializer_list>?
Why are these C++ headers specified to include <initializer_list>?
从 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
参数(rbegin
,rend
)的函数,但没有指定包含<initializer_list>
。
这些例外背后的理由是什么?
似乎没有明确的理由,只是提出了一些对标准进行添加的建议,并且这些建议被接受。
在文档N2672初始值设定项列表建议的措辞的最后,它只是说:
在20.2 实用组件[实用]第1段中:
此子子句包含一些基本的函数和类模板,这些模板在库的其余部分使用。
标题
<utility>
概要#include<initializer_list> namespace std {
因此,该论文的作者将initializer_list
视为一种实用程序,因此它应该包含在<utility>
标题中。因此是这样。
该论文没有对<iterator>
标题提出任何更改,因此没有进行任何更改。
相关文章:
- 请解释这句话(cout<<1+int((a<b)^((b-a)&1) )<<endl
- 呼叫运营商<<临时
- 如何防止clang格式在流运算符调用之间添加换行符<<
- <<操作员在下面的行中工作
- 当初始值设定项是基类名时'initializer does not name a non-static data member or base class'错误
- C2664 无法从'initializer list'转换参数
- C++ 错误:"array must be initialized with a brace-enclosed initializer"
- 如何显式调用运算符<<
- 2D 数组中的"Excess elements in scalar initializer"错误
- 模板操作员&lt;未打电话
- C / CUDA中的模板方法是3个角括号(&lt;&lt;&lt;)
- C - 创建矢量&lt; vector&lt; double&gt;&gt;矩阵具有分配而不是inizializ
- 错误:调用"std::vector<:vector<int>>::p ush_back(std::vector<std::__cxx11::basic_string<
- 使用 std::min "no matching function for call to ‘min(<brace-enclosed initializer list>)’"时出错
- 在C++中标记化"Braced Initializer List"样式字符串(使用 Boost?
- std::move in initializer lists
- C 建造者Clang STD :: Sill,找不到超载的操作员&lt;
- 为什么STD :: MAP需要操作员&lt;以及我如何写一个
- "Default member initializer needed within definition of enclosing class outside of member functions
- 外部抛出"both extern and initializer"错误