什么是左值和右值, 引用c++左值和右值引用的区别
左值和右值的区别
左值是指可以在赋值语句左边出现的表达式,右值是指只能在赋值语句右边出现的表达式。
1
2
3
a = 10; // 10是右值,a是左值
vector<int> v;
v = vector<int>(10, 0); // vector<int>(10, 0)是右值,v是左值
简单来说就是,左值可以被赋值,右值不能被赋值(及=左边是左值, =右边是右值)。
左值引用和右值引用的区别(右值引用在c++11中引入)
了解了左值和右值的区别,我们可以来了解一下左值引用和右值引用的区别。顾名思义,左值引用就是绑定到左值的引用,右值引用就是绑定到右值的引用。
左值引用的语法:类型&
,右值引用的语法类型&&
, 例子如下:
1
2
3
4
5
6
7
int a = 10; // 赋值
int &b = a; // 左值引用
int &&c = 10; // 右值引用
vector<int> v = vector<int>(10, 0); // 赋值
vector<int> &v1 = v; // 左值引用
vector<int> &&v2 = vector<int>(10, 0); // 右值引用
const的左值引用和带const的右值引用的区别
const左值引用和右值引用的区别就是const左值引用可以绑定到右值,const右值引用不能绑定到左值。
1
2
3
4
int a = 10;
const int&& b = a; // 错误
const int& c = a; // 左值
const int& d = 10; // 右值
总结
- 左值引用和右值引用的区别就是左值引用可以绑定到左值,右值引用可以绑定到右值。
- const左值引用和右值引用的区别就是const左值引用可以绑定到右值,const右值引用不能绑定到左值。