Новые требования к итераторам - PullRequest
0 голосов
/ 29 декабря 2018

Я заметил, что большинство, если не все контейнеры, теперь требуют, чтобы их тип ::iterator удовлетворял LegacySomethingIterator вместо SomethingIterator.

Например, std::vector<>::iterator теперь требуется :

iterator LegacyRandomAccessIterator

Это похоже на то же самое для большинства других контейнеров, все они требуют, чтобы их итераторы перешли от SomethingIterator к LegacySomethingIterator.

Существуют также "новые" требования, которые принялиназвания старых требований, таких как RandomAccessIterator, почему они были добавлены?Мне кажется, что новые варианты просто затеняют унаследованные варианты, без различий.

Почему новые были созданы в первую очередь, их требования выглядят одинаково для меня.Почему новые просто не заменяют старые требования вместо того, чтобы прямо сейчас иметь для них 2 разных имени (например, RandomAccessIterator и LegacyRandomAccessIterator)?

1 Ответ

0 голосов
/ 29 декабря 2018

Это не новые вещи, отсюда и термин «наследие».Это просто то, как сайт cppreference выбирает, чтобы согласовать тот факт, что C ++ 20 будет иметь две разные вещи, которые оба являются «концептами», называемыми «RandomAccessIterator».

Pre-C ++ 20, «концепция»в стандарте был просто набор требований, представляющих ожидаемое поведение определенных параметров шаблона.В C ++ 20, когда концепции становятся фактической особенностью языка, это необходимо изменить.Проблема заключается в том, что диапазоны concept в RandomAccessIterator * не совпадают с "старым стилем" концепции "RandomAccessIterator".

Поскольку C ++ считает, что оба онибыть «концептами» (хотя только более новый - concept в языковом смысле), они оба будут иметь одинаковое имя страницы в вики.А MediaWiki на самом деле этого не допускает.

Поэтому разработчики сайта решили использовать «Legacy» для их дифференциации.Обратите внимание, что фактический стандарт не использует этот префикс "Legacy".

Обратите внимание, что стандарт C ++ 20 имеет префикс для более старых понятий: "Cpp17".Таким образом, старая концепция будет "Cpp17RandomAccessIterator".Это не считалось подходящим для Cppreference по очевидным причинам.

...