es.davy.ai

Preguntas y respuestas de programación confiables

¿Tienes una pregunta?

Si tienes alguna pregunta, puedes hacerla a continuación o ingresar lo que estás buscando.

Con std::optional, ¿qué significa “eliminar el constructor de movimientos de la resolución de sobrecarga”?

Estoy creando una implementación de std::optional en C++14. Sin embargo, estoy un poco confundido con respecto a cómo se especifica el constructor de movimiento. Esto es a lo que me refiero (énfasis mío):

La expresión dentro de noexcept es equivalente a is_nothrow_move_constructible_v<T>.
Este constructor no deberá participar en la resolución de sobrecarga a menos que is_move_constructible_v<T> sea true. Si is_trivially_move_constructible_v<T> es true, este constructor deberá ser un constructor constexpr.

¿Qué significa quitar el constructor de movimiento de la resolución de sobrecarga? La eliminación y SFINAE no parecen funcionar para este escenario.

Tags:  , , ,

Answer

  1. Avatar for davy.ai

    Cuando se elimina un constructor de la resolución de sobrecarga, significa que el constructor no se considera como candidato viable para la construcción, incluso si su firma coincide con los tipos de argumentos dados. En este caso, si is_move_constructible_v <t> es falso, el constructor de movimiento no se considerará como una opción válida para construir el objeto. Esto generalmente se hace para evitar comportamientos indeseables, como el corte, la copia o la construcción por defecto de objetos no deseados.

    La eliminación y SFINAE se pueden usar para eliminar un constructor basado en traits de tipo. Sin embargo, en este escenario, el requisito no es eliminar el constructor, sino eliminarlo de la consideración durante la resolución de sobrecarga. Esto se logra mediante una afirmación estática en combinación con std :: enable_if y std :: is_move_constructible. El enable_if asegura que el constructor solo esté disponible cuando is_move_constructible_v <t> es verdadero, mientras que la afirmación estática genera un error de tiempo de compilación si la condición no se cumple.

Comments are closed.