Avatar ·

Que signifie T&& (double esperluette) en C++11 ?

Bonjour, collègues ! J'ai commencé à étudier C++11 et je suis tombé sur une syntaxe étrange — la double esperluette `&&` dans la déclaration des paramètres de fonctions et de templates. Par exemple, j'ai vu ce code :\n\n```cpp\ntemplate\nvoid foo(T&& arg) {\n // du code\n}\n```\n\nOu encore dans l'implémentation du move-constructor :\n\n```cpp\nclass MyClass {\npublic:\n MyClass(MyClass&& other) noexcept;\n};\n```\n\nJe comprends que le simple `&` est une référence (lvalue-reference). Mais que fait la double esperluette ? Sur Internet, on dit que c'est une "rvalue-reference", mais je ne vois pas clairement en quoi cela diffère d'une référence ordinaire et à quoi cela sert. Apparemment, cela est lié à la sémantique de déplacement (move semantics) et au perfect forwarding, mais je n'arrive pas à avoir une vue d'ensemble.\n\nPouvez-vous expliquer avec des exemples simples ? Surtout et