3

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

4

1 回答 1

5

原因可能是来自标准的这个小花絮

第 18.9 节

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

这表明初始化器列表在复制时将具有指针语义而不是值语义,这可能就是为什么它们的迭代器直接是指针而不是包装成“随机访问迭代器”类型的原因。

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

于 2013-07-08T01:32:32.613 回答