为什么std::initializer_list<T>::iterator
被定义为裸指针T const*
而不是random_access_iterator
概念?
答案 0 :(得分:5)
原因可能来自标准
的这个小小的位数第18.9节
类型为initializer_list的对象提供对数组的访问 const E类型的对象。[注意:一对指针或一个指针加上 长度将是initializer_list的明显表示。 initializer_list用于实现指定的初始化列表 在8.5.4。复制初始化列表不会复制基础 元素。 - 后注]
这表明复制时的initializer_lists将具有指针语义而不是值语义,这可能就是为什么它们的迭代器是直接指针而不包装成“random-access-iterator”类型的原因。
AFAIK这是唯一的标准“容器”(注意这里引用),具有指针语义而不是值语义。