Avatar ·

O que significa T&& (e comercial duplo) em C++11?

Olá, colegas! Comecei a estudar C++11 e me deparei com uma sintaxe estranha — o e comercial duplo `&&` na declaração de parâmetros de funções e templates. Por exemplo, vi este código:\n\n```cpp\ntemplate\nvoid foo(T&& arg) {\n // algum código\n}\n```\n\nOu então na implementação do move-constructor:\n\n```cpp\nclass MyClass {\npublic:\n MyClass(MyClass&& other) noexcept;\n};\n```\n\nEu entendo que o `&` simples é uma referência (lvalue-reference). Mas o que faz o e comercial duplo? Na internet escrevem que é "rvalue-reference", mas não está claro para mim como isso difere de uma referência comum e para que serve. Parece que está relacionado com semântica de movimento (move semantics) e perfect forwarding, mas não consigo montar o quadro completo.\n\nVocês podem explicar com exemplos simples? Especialmente e