C++ 左值和右值的讲解

我们常常会遇到这样的问题:
const int& a = 101;//对
int& b = 101;//错

例子:
int a;
int &b = a;
a = 10;
printf(“b = %d\n”,b);
此时b = 10,b是a的引用,就是说b和a的地址相同,对a做改变b也跟着变化。
那么这是为什么呢?
下面我们来讲一个概念:左值和右值?
左值和右值都是针对表达式而言的,左值是指表达式结束后依然存在的持久对象,右值是指表达式结束时就不再存在的临时对象。并不是我们所理解的在=左边就是左值,在=右边就是右值。
C/C++规定:对于对象的引用必须是左值(常量引用除外)
const引用能够绑定到临时对象, 并将临时对象的生命周期由”创建临时对象的完整表达式”提升至”绑定到的const引用超出作用域”。 non-const 引用没有这个功能

回到我们刚开始的那个问题,为什么加了const以后就正确呢,不加就不行呢?
其实我们可以这样去理解:
加了const以后说明a是常量,a的值是不变的,一直都是101。此时a是左值。
如果不加const,b的值是可以变化的,b只是一个临时变量,不是左值。会出现错误:将类型为 ‘int&’ 的非 const 引用初始化为类型为 ‘int’ 的临时变量无效。就是说到分号结束后b也就没有了,不是我们想要的结果。
同时又是C语言不支持int &b = a;这种写法,但是C++支持。
 

你可能感兴趣的:(c++)