Должен ли я вернуть ссылочный параметр rvalue по ссылке rvalue?C++

Программы на C++. Форум разработчиков
Ответить Пред. темаСлед. тема
Гость
 Должен ли я вернуть ссылочный параметр rvalue по ссылке rvalue?

Сообщение Гость »


У меня есть функция, которая изменяет ссылки std::string& lvalue на месте, возвращая ссылку на входной параметр:

std::string& Transform(std::string& input) { // преобразуем входную строку ... обратный ввод; } У меня есть вспомогательная функция, которая позволяет выполнять те же встроенные преобразования для ссылок rvalue:

std::string&& Transform(std::string&& input) { return std::move(transform(input)); // вызывает ссылочную версию lvalue } Обратите внимание, что он возвращает ссылку на rvalue.

Я прочитал несколько вопросов по SO, касающихся возврата ссылок на rvalue (например, здесь и здесь), и пришел к выводу, что это плохая практика.

Из того, что я прочитал, кажется, что все согласны с тем, что, поскольку возвращаемые значения являются значениями r, плюс принимая во внимание RVO, простой возврат по значению будет столь же эффективным:

std::string Transform(std::string&& input) { вернуть преобразование (вход); // вызывает ссылочную версию lvalue } Однако я также читал, что возврат параметров функции препятствует оптимизации RVO (например, здесь и здесь)

Это наводит меня на мысль, что копирование произойдет из возвращаемого значения std::string& справочной версии lvalue transform(...) в >std::string возвращаемое значение.

Это правильно?

Лучше ли сохранить мою версию std::string&& Transform(...)?
Реклама
Ответить Пред. темаСлед. тема

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

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

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

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

  • Похожие темы
    Ответы
    Просмотры
    Последнее сообщение
  • Зачем передавать по ссылке rvalue (&&) вместо передачи по ссылке (&)? [дубликат]
    Anonymous » » в форуме C++
    0 Ответы
    26 Просмотры
    Последнее сообщение Anonymous
  • Что означает, что x имеет ссылочный тип rvalue, но выражение x является lvalue?
    Anonymous » » в форуме C++
    0 Ответы
    30 Просмотры
    Последнее сообщение Anonymous
  • Назначьте ссылочный параметр для ostream для ссылки на переменную-член
    Anonymous » » в форуме C++
    0 Ответы
    32 Просмотры
    Последнее сообщение Anonymous
  • Назначьте ссылочный параметр для ostream для ссылки на переменную-член [дубликат]
    Anonymous » » в форуме C++
    0 Ответы
    15 Просмотры
    Последнее сообщение Anonymous
  • PHP - Сделать ссылочный параметр необязательным?
    Anonymous » » в форуме Php
    0 Ответы
    2 Просмотры
    Последнее сообщение Anonymous

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