Сообщение Re[5]: Передача параметров в функцию по указателю и по ссылк от 18.04.2018 17:55
Изменено 19.04.2018 9:54 свидетель безвиза
Re[5]: Передача параметров в функцию по указателю и по ссылк
Здравствуйте, Анатолий Широков, Вы писали:
V>>>Когда функция эквивалентна сеттеру, то лучше передавать по значению, что бы избежать лишнего копирования. Пример:
V>>>
G>>чем же это лучше чем это:
G>>
АШ>В первом случае в случае передачи rvalue работа идет с одним состоянием, которое перемещается от rvalue до m_a, во втором случае при передаче rvalue работа идет с исходным состоянием и его копией. Если класс A тяжелый для копирования, получим непроизводительные расходы на копирование во втором случае.
А в случае если это не RValue то у нас сначала копирование при вызове функции, а потом move?
И в первом случае у нас (A a) а не (A&& a), разве это гарантированно оптимизируется до "работа идет с одним состоянием, которое перемещается от rvalue до m_a"
И еще, даже если у нас (A&& a), то оно будет работать только с Rvalue, и значит еще придется писать сеттер для копирования
так что я не понимаю как первый вариант может быть предпочтительней, ну или я чего то не понимаю с тем как работает move
таки решил проверить
http://cpp.sh/9spim
ctor
ctor
copy
vs
ctor
copy
V>>>Когда функция эквивалентна сеттеру, то лучше передавать по значению, что бы избежать лишнего копирования. Пример:
V>>>
V>>>void B::func(A a)
V>>>{
V>>> m_a = std::move(a);
V>>>}
V>>>
G>>чем же это лучше чем это:
G>>
G>>void B::func(const A& a)
G>>{
G>> m_a = a;
G>>}
G>>
АШ>В первом случае в случае передачи rvalue работа идет с одним состоянием, которое перемещается от rvalue до m_a, во втором случае при передаче rvalue работа идет с исходным состоянием и его копией. Если класс A тяжелый для копирования, получим непроизводительные расходы на копирование во втором случае.
А в случае если это не RValue то у нас сначала копирование при вызове функции, а потом move?
И в первом случае у нас (A a) а не (A&& a), разве это гарантированно оптимизируется до "работа идет с одним состоянием, которое перемещается от rvalue до m_a"
И еще, даже если у нас (A&& a), то оно будет работать только с Rvalue, и значит еще придется писать сеттер для копирования
так что я не понимаю как первый вариант может быть предпочтительней, ну или я чего то не понимаю с тем как работает move
таки решил проверить
http://cpp.sh/9spim
ctor
ctor
copy
vs
ctor
copy
Re[5]: Передача параметров в функцию по указателю и по ссылк
Здравствуйте, Анатолий Широков, Вы писали:
V>>>Когда функция эквивалентна сеттеру, то лучше передавать по значению, что бы избежать лишнего копирования. Пример:
V>>>
G>>чем же это лучше чем это:
G>>
АШ>В первом случае в случае передачи rvalue работа идет с одним состоянием, которое перемещается от rvalue до m_a, во втором случае при передаче rvalue работа идет с исходным состоянием и его копией. Если класс A тяжелый для копирования, получим непроизводительные расходы на копирование во втором случае.
А в случае если это не RValue то у нас сначала копирование при вызове функции, а потом move?
И в первом случае у нас (A a) а не (A&& a), разве это гарантированно оптимизируется до "работа идет с одним состоянием, которое перемещается от rvalue до m_a"
И еще, даже если у нас (A&& a), то оно будет работать только с Rvalue, и значит еще придется писать сеттер для копирования
так что я не понимаю как первый вариант может быть предпочтительней, ну или я чего то не понимаю с тем как работает move
таки решил проверить
http://cpp.sh/9spim http://cpp.sh/73t5j
ctor
ctor
copy
vs
ctor
copy
V>>>Когда функция эквивалентна сеттеру, то лучше передавать по значению, что бы избежать лишнего копирования. Пример:
V>>>
V>>>void B::func(A a)
V>>>{
V>>> m_a = std::move(a);
V>>>}
V>>>
G>>чем же это лучше чем это:
G>>
G>>void B::func(const A& a)
G>>{
G>> m_a = a;
G>>}
G>>
АШ>В первом случае в случае передачи rvalue работа идет с одним состоянием, которое перемещается от rvalue до m_a, во втором случае при передаче rvalue работа идет с исходным состоянием и его копией. Если класс A тяжелый для копирования, получим непроизводительные расходы на копирование во втором случае.
А в случае если это не RValue то у нас сначала копирование при вызове функции, а потом move?
И в первом случае у нас (A a) а не (A&& a), разве это гарантированно оптимизируется до "работа идет с одним состоянием, которое перемещается от rvalue до m_a"
И еще, даже если у нас (A&& a), то оно будет работать только с Rvalue, и значит еще придется писать сеттер для копирования
так что я не понимаю как первый вариант может быть предпочтительней, ну или я чего то не понимаю с тем как работает move
таки решил проверить
ctor
copy
vs
ctor
copy