Должен ли я вернуть ссылочный параметр 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 МБ.

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