Avatar ·

¿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