Я возвращаю «копию» временного var в get_string () - но я привел возвращаемое значение к rvalue-red.Это бессмысленно или это делает что-нибудь полезное?
Вам не нужно использовать std::move
в этой ситуации, поскольку локальные переменные, возвращаемые значением, «неявно перемещаются» для вас.Для этого в Стандарте есть специальное правило.В этом случае ваш ход пессимизирует , поскольку он может предотвратить RVO (clang предупреждает об этом).
Q2: Предполагая, что ответ Q1 - мне не нужносделай это.Затем я перемещаю свежую копию временной переменной в my_string, или я перемещаю непосредственно временную переменную str в my_string.
Вам не нужно std::move
результат вызова get_string()
.get_string()
- это prvalue , что означает, что автоматически будет вызван конструктор перемещения my_string
(до C ++ 17).В C ++ 17 и выше, обязательное копирование elision гарантирует, что никаких перемещений / копий не произойдет (с prvalues ).
В3: какое минимальное количество копий вам нужно, чтобы получить строковое возвращаемое значение, сохраненное во «внешней» (в моем случае в переменной main ()), икак вы это делаете (если я еще не достиг этого)?
Зависит от Стандарта и от того, имеет ли место RVO.Если произойдет RVO, у вас будет 0 копий и 0 ходов.Если вы нацелены на C ++ 17 и инициализируете с prvalue , у вас гарантированно будет 0 копий и 0 ходов.Если ни то, ни другое не произойдет, у вас, вероятно, будет один ход - я не понимаю, почему здесь должна происходить какая-либо копия.