c++

c++引用的扩展

c++左值和右值引用的区别

Posted by Byolio on November 30, 2024

什么是左值和右值, 引用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;  // 右值

总结

  1. 左值引用和右值引用的区别就是左值引用可以绑定到左值,右值引用可以绑定到右值。
  2. const左值引用和右值引用的区别就是const左值引用可以绑定到右值,const右值引用不能绑定到左值。