Для ясности: любая функция, возвращающая значение, и, следовательно, возвращает значение rvalue, не нуждается в std :: move для применения, и, как уже указывали другие, это отрицательно влияет на оптимизацию производительности.
например.
SomeClass fn()
{
...
}
// Move not needed, detrimental, as the function result is already an rvalue
SomeClass x = std::move(fn());
просто сделать это, как обычно перед C++ 11:
SomeClass x = fn();
Вообще использование зЬй :: ход (х), когда х имеет имя. т.е. он является идентификатором, он не полезен во временных, за исключением особых обстоятельств (например, для предотвращения копирования),
На боковой ноте: Также не пытайтесь использовать std :: move to заставляют «сильный исключающий исключение» (например, если вы хотите, чтобы структура полностью копировалась или оставалась одна (т. е. консистенция) перед потенциальными исключениями), поскольку std :: move может вызывать в зависимости от перемещенного типа, и политика исключения этого типа может изменитесь под вами. Вместо этого используйте функцию-оболочку со статическим утверждением, объединенным с noexcept, кроме этого во время компиляции. См. Is there facility for a strong guaranteed exchange in C++
Что такое 'join'? – ildjarn
Я отредактировал вопрос;) –
В каких сценариях std :: move будет полезен? –