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:
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 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.
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.
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