Страницы

Поиск по вопросам

суббота, 27 октября 2018 г.

Полезный смысл функции с аргументом &&rvalue против const&lvalue при копировании значения

Рассмотрим следующий псевдокод:
класс Параметр { double значение_; public: Параметр& задать(const double& зн){ значение_=зн; return *this; } Параметр& задать(double && зн){ значение_=зн; return *this; } };
но вернее будет общий случай
template класс Параметр { T значение_; public: Параметр& задать(const T& зн){ значение_=зн; return *this; } Параметр& задать(T && зн) { значение_=зн; return *this; } };
В чём может быть профит от использования здесь rvalue? Я понимаю, что так как в любом случае идёт копирование в rvalue нет никакого смысла. Покажите, пожалуйста, на примере близком к этому когда же может получится польза.
На (2) пример бы написал такой(благодарю ixSci)
класс Параметр { std::string значение_; public: Параметр& задать(const std::string & зн){ значение_=зн; return *this; } Параметр& задать(std::string && зн) { значение_=std::move(зн); return *this; } };
Получается на сложных объектах это может сэкономить производительность.


Ответ

rvalue-ссылка интресена только для объектов, чей класс предусматривает оптимизорованный продуманный специальный конструктор перемещения. Хорошая STL - хороший пример. На простых типах от неё толку как от обычной ссылки - может сэкономить копирование нескольких маш.слов = sizeof(type)-sizeof(void*). То есть при копировании большого массива double на 32-битной машине даст 2ую экономию. подходит.
Благодарю @ixSci. Я перефразировал до краткости по сути вопроса.

Комментариев нет:

Отправить комментарий