Constructor de movimiento explícito
Intentando compilar el siguiente código:
struct Foo
{
explicit Foo ( void ) { }
explicit Foo ( Foo&& rhs ) { }
};
Foo bar ( void )
{
return Foo();
}
Obteniendo el siguiente error:
llamada al constructor de copia implícitamente eliminado de 'Foo'
Bueno, es bastante obvio que el copiador se elimina implícitamente.
Pregunta 1: ¿Por qué el compilador necesita el copiador deFoo
? Esperaba el valor de retorno debar
ser construido a partir del valorFoo()
con move-ctor.
Luego vuelvo a declarar el move-ctor como implícito y todo se compila con éxito.
Pregunta 2: ¿Por qué el compilador ya no necesita copy-ctor cuando vuelvo a declarar el move-ctor como implícito?
Pregunta 3: Que haceexplicit
palabra clave significa en el contexto de copiar y mover ctors, ya que definitivamente significa algo diferente del contexto de los ctors regulares.