initializer_list迭代器定义的选择

choice of initializer_list iterator definition

本文关键字:选择 定义 迭代器 list initializer      更新时间:2023-10-16

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

原因可能是来自标准的这个小tid位

第18.9节

initializer_list类型的对象提供对const E.类型的对象。[注意:一对指针或一个指针加长度将是initializer_list的明显表示。initializer_list用于实现指定的初始值设定项列表8.5.4。复制初始值设定项列表不会复制基础元素--尾注]

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

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