"Si un trabajador quiere hacer bien su trabajo, primero debe afilar sus herramientas." - Confucio, "Las Analectas de Confucio. Lu Linggong"
Página delantera > Programación > ¿Por qué `std::move` se llama `std::move` si en realidad no mueve nada?

¿Por qué `std::move` se llama `std::move` si en realidad no mueve nada?

Publicado el 2024-11-16
Navegar:301

Why is `std::move` Called `std::move` if it Doesn't Actually Move Anything?

¿Por qué std::move se llama std::move?

La función std::move, a pesar de su nombre, no realmente mover nada en absoluto. Simplemente convierte un valor l (una expresión que hace referencia a un objeto) en un valor r (una expresión que representa un objeto temporal). Esta conversión se realiza mediante una conversión a la categoría xvalue, que es distinta de lvalues ​​y prvalues.

El motivo de esta elección de nombre se remonta a la historia del concepto. Originalmente, la operación de movimiento se introdujo como una forma de intercambiar valores de manera eficiente sin copiarlos. La sintaxis inicial para esto implicaba convertir valores l en valores r usando static_cast. Para mejorar la legibilidad y transmitir la intención de estas conversiones, se introdujo la palabra clave move como azúcar sintáctico para static_cast.

En el contexto de la época, el uso del término "mover" tenía como objetivo indicar el propósito de estas conversiones. : para habilitar la semántica de movimiento. La consecuencia es que el código transmite no la acción técnica precisa (convertir en un valor), sino más bien el resultado deseado (mover el objeto).

A lo largo de los años, el concepto de valores l y valores r ha evolucionado hasta convertirse en el categorías de valores que tenemos hoy, con xvalues ​​representando objetos que han sido convertidos a rvalues. Como resultado, la palabra clave mover podría considerarse engañosa, ya que solo implica una acción que puede ocurrir o no encubierta.

Sin embargo, la opción de usar la palabra clave mover se ha mantenido para preservar la legibilidad. y evite la confusión que podría surgir de una sintaxis desconocida como cast_to_xvalue. La función std::move sigue siendo una utilidad valiosa que permite a los programadores expresar la semántica de movimiento de manera concisa, incluso si su nombre no captura perfectamente los detalles técnicos de su operación.

Último tutorial Más>

Descargo de responsabilidad: Todos los recursos proporcionados provienen en parte de Internet. Si existe alguna infracción de sus derechos de autor u otros derechos e intereses, explique los motivos detallados y proporcione pruebas de los derechos de autor o derechos e intereses y luego envíelos al correo electrónico: [email protected]. Lo manejaremos por usted lo antes posible.

Copyright© 2022 湘ICP备2022001581号-3