¿Por qué C ++ no mueve las referencias de valor de construcción por defecto? [duplicar
Esta pregunta ya tiene una respuesta aquí:
@Rvalue Reference se trata como un Lvalue? 4 respuestase llama al constructor de referencia @Lvalue en lugar del constructor de referencia rvalue 1 respuestaDi que tengo la siguiente función
void doWork(Widget && param) // param is an LVALUE of RRef type
{
Widget store = std::move(param);
}
¿Por qué necesito lanzarparam
volver a un valor constd::move()
? ¿No debería ser obvio que el tipo deparam
es rvalue ya que se declaró en la firma de la función como una referencia de rvalue? ¿No debería invocarse automáticamente el constructor de movimientos aquí solo con este principio?
¿Por qué no sucede esto por defecto?