选择initializer_list迭代器定义

时间:2013-07-08 01:25:08

标签: c++ c++11

为什么std::initializer_list<T>::iterator被定义为裸指针T const*而不是random_access_iterator概念?

1 个答案:

答案 0 :(得分:5)

原因可能来自标准

的这个小小的位数

第18.9节

  

类型为initializer_list的对象提供对数组的访问   const E类型的对象。[注意:一对指针或一个指针加上   长度将是initializer_list的明显表示。   initializer_list用于实现指定的初始化列表   在8.5.4。复制初始化列表不会复制基础   元素。 - 后注]

这表明复制时的initializer_lists将具有指针语义而不是值语义,这可能就是为什么它们的迭代器是直接指针而不包装成“random-access-iterator”类型的原因。

AFAIK这是唯一的标准“容器”(注意这里引用),具有指针语义而不是值语义。