Size: a a a

2020 August 06

K

Kirill in pro.cxx
это был самый очевидный источник -  core guidelines :)
источник

Т8

Т-34 85 in pro.cxx
Kirill
это был самый очевидный источник -  core guidelines :)
Спасибо, но это не в полной мере отвечает на вопрос. Я правильно понял, что copy elision работает лишь при инициализации локального объекта временным объектом и при NRVO? А в остальных случаях вряд ли сработает, поэтому лучше просто замувить (если не вникать)?
источник

Т8

Т-34 85 in pro.cxx
Spoonson
если просто тяжелый обьект, всегда можно его по значению передавать и везде std::move делать. Правда, один лишний мув будет, но обычно это не очень важно.
Тогда надо 2 перегрузки делать - для r-value и по значению. Может, у дёргающего функцию есть возможность отдать объект насовсем, и тогда выгоднее передать по r-value
источник

Т8

Т-34 85 in pro.cxx
Kirill
это был самый очевидный источник -  core guidelines :)
Кстати, а где лучше смотреть подробности? Саттер или Мейерс?
источник

S

Spoonson in pro.cxx
Т-34 85
Тогда надо 2 перегрузки делать - для r-value и по значению. Может, у дёргающего функцию есть возможность отдать объект насовсем, и тогда выгоднее передать по r-value
так в этом случае дергающий делает f(std::move(arg)) и все более-менее быстро проходит. Самое быстрое конечно делать кучу перегрузок и т.д.
источник

NP

Nikita Petrenko in pro.cxx
Copy elision не может происходить в аргументы функции

Ну, вернее, может, но только если компилятор докажет, что ты этого не заметишь
источник

🎄T

🎄🎊 R 🎅 Tb| ✡️ 🎊🎄... in pro.cxx
Nikita Petrenko
Copy elision не может происходить в аргументы функции

Ну, вернее, может, но только если компилятор докажет, что ты этого не заметишь
Почему не может? https://godbolt.org/z/58c9K1
источник

NP

Nikita Petrenko in pro.cxx
хм, да, ошибся. В аргументы можно, а вот из аргументов NVRO делать нельзя
источник

ПК

Побитый Кирпич... in pro.cxx
Т-34 85
Есть общий совет (не вдаваясь в детали), когда стоит принимать относительно тяжёлый объект в параметре по значению, когда по l-value, когда по r-value?

Если так сказать нельзя, то хотя бы как принимать объект для сеттера, который будет полученное класть в поле класса? Я раньше слышал совет на copy elision особо не надеяться, так ли всё плохо?
Муваемый объект для инициализации поля в 99% по значению, в остальных случаях по const&
источник

ПК

Побитый Кирпич... in pro.cxx
В шаблонным коде вообще скорее всего по forward reference
источник

Т8

Т-34 85 in pro.cxx
Для временных работает, для локальных будет копия
источник

Т8

Т-34 85 in pro.cxx
Побитый Кирпич
Муваемый объект для инициализации поля в 99% по значению, в остальных случаях по const&
Так в таком случае как минимум одна копия случится - при передаче в функцию. Но если нам не нужен исходный объект после передачи, то было бы неплохо его прокинуть в функцию, чтоб вообще ни одной копии не было
источник

ПК

Побитый Кирпич... in pro.cxx
Т-34 85
Так в таком случае как минимум одна копия случится - при передаче в функцию. Но если нам не нужен исходный объект после передачи, то было бы неплохо его прокинуть в функцию, чтоб вообще ни одной копии не было
Там не будет копий, если вызывающий сам не захочет копирования
источник

ПК

Побитый Кирпич... in pro.cxx
Я о передаче в конструктор если что
источник

Т8

Т-34 85 in pro.cxx
Побитый Кирпич
Я о передаче в конструктор если что
Да без разницы. Если ты локальную переменную по значению туда передаёшь, то всегда это будет копия. А не по значению нельзя, если перегрузок других нет
источник

ПК

Побитый Кирпич... in pro.cxx
Т-34 85
Да без разницы. Если ты локальную переменную по значению туда передаёшь, то всегда это будет копия. А не по значению нельзя, если перегрузок других нет
struct Foo { Foo(vector<int> vec); };

vector<int> vec { ... };
Foo foo(std::move(vec));

Покажи мне где тут копия
источник

Т8

Т-34 85 in pro.cxx
Побитый Кирпич
struct Foo { Foo(vector<int> vec); };

vector<int> vec { ... };
Foo foo(std::move(vec));

Покажи мне где тут копия
У Foo удали мув ктор
источник

ПК

Побитый Кирпич... in pro.cxx
Т-34 85
У Foo удали мув ктор
причём тут move ctor Foo? Оно тут не мувается никуда
источник

ПК

Побитый Кирпич... in pro.cxx
Мы про инициализацию Foo
источник

m

magras in pro.cxx
Т-34 85
У Foo удали мув ктор
Если у объекта есть только copy конструктор, это должно говорить о том, что цена его копирования примерно равна цене мува.
источник