简单理解,左值拥有地址,右值没有地址,是一个临时变量。
左值不一定在左边,在右边的不一定是右值
int i = 10; int a = i;//把左值赋给左值
左值引用
非const右值不能赋值给左值引用
int SetValue(int value) { return value; } int SetValue2(int& value){ return value; } int main() { int i = 10; int a = i;//把左值赋给左值 SetValue(i); SetValue(10); SetValue2(i); SetValue2(10);//错误 }
const的情况下
int& b = 10;//错误,右值无法赋给左值引用 const int& c = 10;//可以,等价于int temp=10; // const int&c=temp;相当于临时创建了一个左值
int SetValue3(const int& value) {//这样的形式,SetValue3(10)或者SetValue(a)都不会报错 return value; }
右值引用
int SetValue3(const int& value) {//这样的形式,SetValue3(10)或者SetValue(a)都不会报错 return value; } int SetValue3(int&& value) {//右值引用 return value; } int main() { SetValue3(10);//会优先调用传参是右值引用的函数 SetValue3(a); }
const int&& value。就相当于不能修改value这个值,和const一个意思