Обоснования пересылки ссылокC++

Программы на C++. Форум разработчиков
Ответить
Anonymous
 Обоснования пересылки ссылок

Сообщение Anonymous »

Недавно я читал о пересылке ссылок и наткнулся на следующий распространенный пример:

Код: Выделить всё

void put(const Data& data) { m_data = data; }

void put(Data&& data) {m_data = std::move(data);}
И решением этой проблемы было введение ссылки на пересылку следующим образом:

Код: Выделить всё

template 

void put(T&& data) {m_data = std::forward(data);}
Однако я заметил, что есть другое решение, которое работает так же, но немного чище:

Код: Выделить всё

void put(Data data) {m_data = std::move(data);}
Таким образом, если put получит некоторое lvalue, будет вызвана только одна копия, а если он получит rvalue, будут вызваны только операции перемещения. Это то же самое, что и универсальные ссылки.
Это также использует меньше шаблонов и приводит к уменьшению количества ошибок компиляции.
Учитывая это решение, каковы оправдания пересылка ссылок - функциональные возможности, которые он может предоставить, чего не может дать простая идиома передачи по значению и перемещению?
Спасибо!

Подробнее здесь: https://stackoverflow.com/questions/793 ... references
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «C++»