2011-04-03 27 views
12

que no entiendo muy bien la función std::movemovimiento semántica std :: mover

template <class T> 
typename remove_reference<T>::type&& 
move(T&& a) 
{ 
    return a; 
} 

qué remove_reference? ¿podría alguien darme una explicación simple?

Respuesta

17

Piense en lo que sucede si T es una referencia de valor-I, por ejemplo MyClass &. En ese caso, T && se convertiría en MyClass & &&, y debido a las reglas de colapso de referencia , esto se transformaría nuevamente en MyClass &. Para obtener el resultado correcto, typename remove_reference<MyClass&>::type&& primero elimina las decoraciones de referencia del tipo, por lo que MyClass & se mapea a MyClass, y luego se le aplica la referencia r, obteniendo MyClass &&.

+0

Sí, eso es exactamente correcto, pero obviamente alguien no está de acuerdo :) –

+1

@Let: ¿Qué quieres decir? No veo ningún voto negativo sobre mi respuesta hasta el momento ... – fredoverflow

+0

Uhm. Escribí lo mismo 10 minutos antes y me votaron negativamente. –

Cuestiones relacionadas