La mayoría de las veces que veo std::move
publicado aquí, hace referencia a la <utility>
versión.
El std::move
en<algorithm>
realidad hace lo que su nombre sugiere, movimiento , mientras que el std::move
en<utility>
proyecta su argumento a una xValue, que es básicamente un paso de preprocesamiento para finalmente mover el xValue en un valor-I. Entonces, ¿no es un poco confuso que ambos sean nombrados move
cuando la funcionalidad de cada uno es diferente?
move
debería haber sido llamado make_rvalue
o algo por el estilo. Es frustrante explicar una y otra vez que el parámetro único en std::move
realidad no mueve nada.
<algorithm>
está dentro es simplemente el que está <utility>
aplicado a un rango completo.
<algorithm>
realmente realiza el movimiento (suponiendo que hay un operador de asignación de movimiento definido para el tipo que estamos moviendo).
std::move
un operador en lugar de una función de biblioteca. Cualquier nombre mejor que std::move
hubiera sido más largo, lo que apesta.