"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é no estuvieron presentes las implementaciones de movimiento predeterminadas en los primeros borradores de C++11?

¿Por qué no estuvieron presentes las implementaciones de movimiento predeterminadas en los primeros borradores de C++11?

Publicado el 2024-11-19
Navegar:185

Why Were Default Move Implementations Absent in Early C  11 Drafts?

¿Por qué no hay implementaciones de movimientos predeterminadas en los primeros borradores de C 11?

En las primeras versiones del estándar C 11, la generación implícita de constructores de movimientos y operadores de asignación era una tema de debate. Esto generó cambios en borradores posteriores, lo que resultó en el siguiente comportamiento en los compiladores disponibles actualmente:

Semántica de movimiento implícito

Desde el lanzamiento en noviembre del estándar C (N3225), constructores de movimiento implícito y asignación Los operadores se pueden generar bajo las siguientes condiciones:

  • La clase no tiene ningún constructor de copia declarado por el usuario.
  • La clase no tiene ningún operador de asignación de copia declarado por el usuario.
  • La clase no tiene un operador de asignación de movimiento declarado por el usuario.
  • La clase no tiene un destructor declarado por el usuario.
  • El constructor de movimiento no se definiría implícitamente como eliminado.

Explicando la ausencia en los primeros borradores

La decisión de no incluir implementaciones de asignaciones/constructores de movimientos predeterminados en los primeros borradores fue el resultado de preocupaciones sobre la posibilidad de confusión y comportamiento inesperado. Sin embargo, las revisiones posteriores han abordado estas preocupaciones al endurecer las condiciones para la generación de movimientos implícitos.

Solución alternativa

Si está buscando una manera de utilizar la semántica de movimientos sin escribir constructores de movimientos/operadores de asignación explícitos , puede utilizar la [macro de GManNickG] (https://stackoverflow.com/a/12316884/8674521). Esta macro genera la semántica de movimiento necesaria para su clase.

Al implementar la semántica de movimiento, también puede optar por no proporcionar una función de miembro de intercambio.

Ú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