Que signifie T&& (double esperluette) en C++11 ?
Bonjour ! J'ai commencé à étudier C++11 et je suis tombé sur la nouvelle notation `T&&` dans du code. Je comprends que `&` est une référence et que `&&` est un "ET" logique. Mais dans le contexte des types, c'est autre chose.
Par exemple, j'ai vu ce code :
```cpp
template
void foo(T&& arg) {
// faire quelque chose
}
```
Et aussi :
```cpp
void bar(std::vector&& vec) {
// ...
}
```
Au début, j'ai pensé que `T&&` était une "référence sur une référence", ce qui semble absurde. Ensuite, j'ai lu que cela s'appelle une "rvalue reference". Mais je ne comprends pas à quoi cela sert. Quelle est la différence entre `T&` et `T&&` ? Quand dois-je utiliser `T&&` au lieu de `T&` ou `const T&` ? Et qu'est-ce que le "perfect forwarding" (transmission parfaite) dont tout le monde parle ?
Expliquez-moi, s'il vous plaît, avec des exemples simples. J'ai l'impression de passer à côté de quelque chose d'important dans le C++ moderne.