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?
c++
move
c++-standard-library
Iamanon
fuente
fuente
move
debería haber sido llamadomake_rvalue
o algo por el estilo. Es frustrante explicar una y otra vez que el parámetro único enstd::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 questd::move
hubiera 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::move
Es una forma muy concisa de expresar ambas funciones. El de adentro<algorithm>
es complementariostd::copy
del 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