左值右值

左值和右值

我们在看书的时候,经常可以看到关于 左值(L-value) 和 右值(R-value) 的概念,那么到底什么是左值,什么是右值,它们之间的区别又是在哪里呢?

    通俗的讲,左值就是能够出现在赋值符号左面的东西,而右值就是那些可以出现在赋值符号右面的东西了。

举个很简单的例子:

a=b+100;

那么这里a就是左值,b+25就是一个右值。左值和右值之间是不一定都能互换的,上面的这个例子就是不能互换的,如果写成

b+100=a;

大家都能看出来这样写会不编译通过的,因为编译器无法判断b+100的内存地址,所以不能操作。

看了这个例子,可以做一个总结,左值必须应该是一个变量或者是表达式等,但是它的物理位置是可以确定的,而右值不一定,这也是它们两者之间的区别。

关于左值是表达式的例子有数组,还有指针这些都可以。

int array[10];

int a=5;

array[a+3]=10; //这里左值就是一个数组表达式了

 那么对于(a=2)=66这样的表达式怎么看?另外,为什么自增(减)运算只能用于左值,不能用于右值,即表达式++(a++)为什么错误呢?

a=2)=66 中就是按顺序赋值就是了 所以a=66 

++(a++) 
至于右值为什么不能用,因为后增量(后减量)返回的值是修改前的变量值,故不为左值,所以他就不能用了

a++相当于
int a;
{
int temp=a;
a=a+1;
teturn temp;

你可能感兴趣的:(编译器)