¿Qué significa T&& (doble ampersand) en C++11?
¡Hola! Empecé a estudiar C++11 y me topé con la nueva notación `T&&` en el código. Entiendo que `&` es una referencia, y `&&` es un "Y" lógico. Pero en el contexto de tipos es algo diferente.
Por ejemplo, he visto este código:
```cpp
template
void foo(T&& arg) {
// hacemos algo
}
```
Y también:
```cpp
void bar(std::vector&& vec) {
// ...
}
```
Al principio pensé que `T&&` era una "referencia a referencia", lo que suena sin sentido. Luego leí que se llama "rvalue reference". Pero no entiendo para qué sirve. ¿Cuál es la diferencia entre `T&` y `T&&`? ¿Cuándo debo usar `T&&` en lugar de `T&` o `const T&`? ¿Y qué es "perfect forwarding", del que todos hablan?
Explíquenme, por favor, con ejemplos simples. Siento que me estoy perdiendo algo importante en el C++ moderno.
<<>>
Respuesta breve: Rvalue references y move semantics
T&& en C++11 es una rvalue reference (referencia a un objeto temporal). Permite