【C++】C++11--右值引用
**右值引用**
在 C++11 中,引入了右值引用(rvalue reference)的概念。右值引用是一种特殊的引用类型,它可以绑定到右值上,而不是左值上。
###什么是右值?
在 C++ 中,右值是指表达式的结果,不是变量名。例如:
* `5` 是一个右值,因为它是一个数字。
* `"hello"` 是一个右值,因为它是一个字符串字面值。
* `std::vector
### 右值引用右值引用是指一种特殊的引用类型,它可以绑定到右值上。右值引用的语法如下:cppT&& r;
其中 `T` 是一个类型,`r` 是一个右值引用变量名。
### 右值引用的特性右值引用的几个重要特性是:
* **绑定到右值上**:右值引用可以绑定到任何右值上,不论其类型如何。
* **不能绑定到左值上**:右值引用不能绑定到左值上,例如变量名或数组下标。
* **移动语义**:当右值引用的对象被销毁时,它会自动执行移动语义(move semantics),将资源转移给另一个对象。
### 右值引用的使用右值引用可以在以下场景中使用:
* **函数参数**:可以将右值引用作为函数参数,来传递临时对象。
* **返回类型**:可以将右值引用作为函数返回类型,来返回临时对象。
* **赋值语句**:可以使用右值引用来执行赋值语句。
###代码示例以下是几个使用右值引用的代码示例:cpp#include <iostream>
#include <vector>
int main() {
// 右值引用的函数参数 int&& x =5;
std::cout << "x = " << x << std::endl;
// 右值引用的返回类型 auto y = std::move(10); // 移动语义 std::cout << "y = " << y << std::endl;
// 右值引用的赋值语句 int&& z =20;
int a = z; // 赋值语句 std::cout << "a = " << a << std::endl;
return0;
}
### 总结右值引用是 C++11 中引入的一种特殊的引用类型,它可以绑定到右值上,而不是左值上。右值引用的特性包括绑定到右值上、不能绑定到左值上以及移动语义。右值引用可以在函数参数、返回类型和赋值语句中使用。