Re: Про вертание контейнеров
От: Evgeny.Panasyuk Россия  
Дата: 05.03.15 15:01
Оценка: 2 (1)
Здравствуйте, regnar, Вы писали:

R>Можно ли 2015 году полагаться на NRVO, RVO и прочие элижены в современных компиляторах и возвращать стандартные контейнеры по значению?

R>И чтобы без сюрпризов в виде проседания в неожиданных местах.

Сюрпризов не будет в любом случае (не считая, конечно, std::array), так как гарантированно сработает move. Но и сами copy/move elisions работают хорошо во всех современных компиляторах при включённых оптимизациях.
Кстати, где-то слышал, что в будущих версиях ISO copy/move elision могут сделать обязательными.

Но, даже учитывая это, иногда всё же выгоднее брать ссылку на выходной параметр, например если это vector — это позволит переиспользовать его capacity, уменьшая количество аллокаций.
Помимо этого бывают случаи где выходной параметр позволяет сделать код более обобщённым, например через OutputIterator.
Отредактировано 05.03.2015 15:10 Evgeny.Panasyuk . Предыдущая версия . Еще …
Отредактировано 05.03.2015 15:07 Evgeny.Panasyuk . Предыдущая версия .
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.