cpp-ru / ideas

Идеи по улучшению языка C++ для обсуждения
https://cpp-ru.github.io/proposals
Creative Commons Zero v1.0 Universal
89 stars 0 forks source link

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

Closed apolukhin closed 3 years ago

apolukhin commented 3 years ago

Перенос предложения: голоса +0, -1 Автор идеи: riad

emplace_back и push_back должны возвращать iterator т.к это строго больше информации, чем reference

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

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

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

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

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

apolukhin commented 3 years ago

yndx-antoshkka, 10 сентября 2018, 11:26 Боюсь что это уже не изменить.

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

riad, 10 сентября 2018, 22:58

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

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

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

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

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

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