2013-07-08 5 views
3

Почему std::initializer_list<T>::iterator определяется как голой указатель T const*, а не концепция random_access_iterator?Выбор определения идентификатора initializer_list

+1

Указатели - это итераторы произвольного доступа. Я не знаю, что говорит стандарт о 'initializer_list' (после того, как я посмотрел, я вижу, что так оно и есть в стандарте), но он позволяет итераторам контейнеров быть указателями. – chris

+0

@chris - конечно, но мне интересно, почему он отличается от всех других стандартных контейнеров. –

+0

Для начала это не контейнер. Возможно, простота была фактором. Я не могу сказать ничего точно. – chris

ответ

5

Причина, вероятно, из этого мало-три раза в день бита от стандартного

Раздел 18.9

Объект типа initializer_list обеспечивает доступ к массив объектов типа сопзЬ E. [Примечание: Пара указателей или указатель плюс длина будет очевидным представлением для initializer_list. initializer_list используется для реализации списков инициализаторов, как указано в 8.5.4. Копирование списка инициализаторов не копирует основные элементы . -end примечание]

Это указывает на то, что initializer_lists при копируемые будет иметь указатель семантику, а не семантику значений, которые, вероятно, поэтому их итераторы непосредственно указатели и не завернутые в тип «случайного доступа итератора».

AFAIK это единственный стандарт «контейнер» (обратите внимание на цитаты здесь), чтобы иметь семантику указателя, а не семантику значения.

Смежные вопросы