Avatar ·

C++11 中的 T&&(双与号)是什么意思?

```html

简短回答:右值引用与移动语义

你好!我开始学习C++11,在代码中遇到了新的符号`T&&`。我知道`&`是引用,`&&`是逻辑"与"。但在类型上下文中,这是别的东西。

例如,我见过这样的代码:

```cpp template void foo(T&& arg) { // 做些什么 } ``` 以及: ```cpp void bar(std::vector&& vec) { // ... } ``` 起初我以为`T&&`是"引用的引用",这听起来毫无意义。后来我读到这叫做"右值引用"(rvalue reference)。但我不明白它的用途。`T&`和`T&&`有什么区别?什么时候应该使用`T&&`而不是`T&`或`const T&`?还有大家常说的"完美转发"(perfect forwarding)到底是什么? 请用简单的例子解释一下。我觉得我遗漏了现代C++中某些重要的东西。 ```