lvalue与rvalue释疑

先介绍几个概念:

1 、与数据对象相关的值有两种:

n         数据值

即存储在某个内存地址中的数据本身。

n         地址值

即该数据对象的存储位置。

2 lvalue rvalue

n         lvalue 通常指的是可以寻址并且可以对该地址内容存储的对象进行写操作 (writeable) 。可以看作 location value

n         rvalue 通常指的是那些能够提供数据值的数据,即从某个 mem 中读出的 value 。可以认为是 read value

3 、文字常量( literate const )与变量( variable

n         文字常量

即通常指的数字( 1 200 ,。。。)。该数据对象分配在常量内存区域,不可以寻址,也就是不可以通过操作它的地址值来变更的数据对象。因此不能作为 lvalue 出现,只能是 rvalue

n         变量

可以寻址。通过变量名就可以改变该数据地址的内容。所以可以成为 lvalue rvalue

 

总结:

u       lvalue :可以通过数据对象自身地址来改变数据对象值的数据对象,要求该对象可以寻址。

u       rvalue :能够提供数据对象本身数值的数据对象,该对象不一定可以寻址

u       由操作符决定需要什么类型的数据值类型

 

注意:

lvalue 中的 ’l’ 不是 left 的意思,既不是指在操作符左边。同样 ’r’ 不是 right

       例如:

x++;

       ++x;

       两个表达式均要求 x lvalue

 

使用举例:

①.     0=1             //error, 0 不是 lvalue

②.     x+0.1*y=z;     //error, 在赋值运算符左边的应该为 lvalue

③.     const int size=4;

size=10;         //error, 数据对象地址内容不可以改变,即不是 writeable

你可能感兴趣的:(lvalue与rvalue释疑)