emplace_back и push_back должны возвращать итератор.

riad
riad

Сегодня столкнулся с кейсом, где было бы удобно получить итератор на только что emplae_back'нутый элемент, но эта функция, начиная с c++17 возвращает reference.

Кажется, что итератор возвращать логичнее: во-первых, это консистентно с emplace()/insert(), во вторых из него можно получить reference, но не наоброт.

Собственно, тут есть два вопроса:

1) А есть ли понимание почему сделано так как сделано (никто не предложил возвращать итератор или это поему-то плохо)?

2) Есть ли какой-нибудь шанс изменить возвращаемый тип, не ломая совместимость хотя бы в простых кейсах?

-1
рейтинг
2 комментария
yndx-antoshkka

Боюсь что это уже не изменить.

Ссылку возвращают по той причине, что после push_back хочется сразу работать со вставленным значением (без лишнего шага - разадресации итератора). К тому же, не очень понятно, какиё именно итератор выхотит получить - const? reverse?.... Если данное поведение не устривает, то всегда есть возможность получать итераторы старыми способами через end()/begin()

yndx-antoshkka
riad

> Ссылку возвращают по той причине, что после push_back хочется сразу работать со вставленным значением

Кажется, что в обычном юзкейсе просто заменится . на ->

> К тому же, не очень понятно, какиё именно итератор выхотит получить

Почему-то у insert таких вопросов не возникало

> Боюсь что это уже не изменить.

Жаль, но это похоже на правду

riad
Другие идеи
Группа создана, чтобы собирать предложения к стандарту C++, организовывать их внутренние обсуждения, помогать готовить их для отправки в комитет и защищать на общих собраниях в рабочей группе по С++ Международной организации по стандартизации (ISO).
Все предложения