La mayoría de las veces que veo std::movepublicado aquí, hace referencia a la <utility>versión.
El std::moveen<algorithm> realidad hace lo que su nombre sugiere, movimiento , mientras que el std::moveen<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 movecuando la funcionalidad de cada uno es diferente?
c++
move
c++-standard-library
Iamanon
fuente
fuente

movedebería haber sido llamadomake_rvalueo algo por el estilo. Es frustrante explicar una y otra vez que el parámetro único enstd::moverealidad 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::moveun operador en lugar de una función de biblioteca. Cualquier nombre mejor questd::movehubiera sido más largo, lo que apesta.Respuestas:
Puede ser confuso, especialmente para aquellos que no están acostumbrados a los idiomas que admiten sobrecarga. Es cierto que las pautas de programación generalmente desalientan las sobrecargas con significados separados.
Pero tampoco es muy difícil aprender que hay dos funciones con el mismo nombre, aunque esto es subjetivo. Las diferentes listas de argumentos proporcionan un contexto suficiente para reconocer fácilmente una de la otra.
Porque los diseñadores del lenguaje optaron por usar el mismo nombre para ambas funciones.
std::moveEs una forma muy concisa de expresar ambas funciones. El de adentro<algorithm>es complementariostd::copydel mismo encabezado.Describir lo que hace la función no es lo único que puede expresar el nombre de la función. En este caso, el nombre expresa la intención del programador que utilizó la función: el programador tiene la intención de moverse del argumento lvalue, si es posible.
Esto es algo que los programadores pueden necesitar escribir con bastante frecuencia; por lo tanto, se necesita un nombre muy corto.
fuente