Почему std::initializer_list<T>::iterator
определяется как голой указатель T const*
, а не концепция random_access_iterator
?Выбор определения идентификатора initializer_list
ответ
Причина, вероятно, из этого мало-три раза в день бита от стандартного
Раздел 18.9
Объект типа initializer_list обеспечивает доступ к массив объектов типа сопзЬ E. [Примечание: Пара указателей или указатель плюс длина будет очевидным представлением для initializer_list. initializer_list используется для реализации списков инициализаторов, как указано в 8.5.4. Копирование списка инициализаторов не копирует основные элементы . -end примечание]
Это указывает на то, что initializer_lists при копируемые будет иметь указатель семантику, а не семантику значений, которые, вероятно, поэтому их итераторы непосредственно указатели и не завернутые в тип «случайного доступа итератора».
AFAIK это единственный стандарт «контейнер» (обратите внимание на цитаты здесь), чтобы иметь семантику указателя, а не семантику значения.
- 1. Выбор идентификатора не определен
- 2. Выбор динамического идентификатора
- 3. Выбор из XML определения порядка
- 4. Выбор идентификатора в нескольких подэлементах
- 5. Выбор идентификатора предшествующего брата родителя
- 6. Выбор идентификатора с внутренним соединением
- 7. Выбор уникального идентификатора в mysql
- 8. Генерация идентификатора определения процесса в activiti
- 9. Использовать имя класса для динамического определения идентификатора
- 10. Как использовать initializer_list
- 11. std :: initializer_list type deduction
- 12. Неполные типы и initializer_list
- 13. C++ 11 initializer_list ошибка
- 14. Как скопировать список initializer_list?
- 15. Конструктор и initializer_list
- 16. LinkedList using initializer_list
- 17. Variable length initializer_list
- 18. 'initializer_list' файл не найден
- 19. можно изменить контейнер initializer_list?
- 20. Реализация std :: initializer_list
- 21. «initializer_list» файл не найден
- 22. Как перемещать элементы initializer_list?
- 23. Копия функтора и initializer_list
- 24. Использование многомерного std :: initializer_list
- 25. Lifetime Растяжение initializer_list возвращения
- 26. std :: initializer_list alternative
- 27. Использование initializer_list с битами
- 28. Инициализация std :: initializer_list
- 29. Конструктор из initializer_list
- 30. Семантика std :: initializer_list
Указатели - это итераторы произвольного доступа. Я не знаю, что говорит стандарт о 'initializer_list' (после того, как я посмотрел, я вижу, что так оно и есть в стандарте), но он позволяет итераторам контейнеров быть указателями. – chris
@chris - конечно, но мне интересно, почему он отличается от всех других стандартных контейнеров. –
Для начала это не контейнер. Возможно, простота была фактором. Я не могу сказать ничего точно. – chris