早教吧 育儿知识 作业答案 考试题库 百科 知识分享

lvalue和rvalue的区别俺以前的在C入门的理解是lvalue是可以被赋值、修改的,rvalue是只读的.但在vc++2010入门书里面是这样解释的:lvalue:指的是内存中持续存储数据的一个地址.rvalue:临时存储的

题目详情
lvalue和rvalue的区别
俺以前的在C入门的理解是lvalue是可以被赋值、修改的,rvalue是只读的.
但在vc++2010入门书里面是这样解释的:
lvalue:指的是内存中持续存储数据的一个地址.
rvalue:临时存储的表达式结果.
以下三个表达式:
a=b+c;
b=++a;
c=a++;
其中:语句1:表达式"b+c"是一个rvalue.
语句2:表达式"++a"是一个lvalue;
语句3:表达式"a++"是一个rvalue;
因为基本上每章都有lvalue和rvalue的讨论,俺看了半天也不明白其区别和含义,这书我快看不下去了.如果能浅显易懂的让俺明白最好了.
▼优质解答
答案和解析
lvalue 就是 left value 左值
rvalue 就是 right value 右值

之所以叫这么个名字, 是因为 左值 可以放在 = 的左边, 而右值不可以.

int a;
const int b = 3;

a = 10; // a可以放在=的左边, 也就是说可以赋值, 那么就是"左值"
b = 10; // const 类型不可以赋值, 也就是说不可以放在=的左边, 所以是"右值"

左值包括所有的 "非const" 变量.
右值包括所有"不能赋值"的东西, 包括const 变量, 临时变量, 常数等等.

b+c 返回临时对象, 右值, 所以你不可以 b+c = x;
++a 前 ++和--都返回本身的引用, 属于左值, 所以可以(++a) = x; 虽然这么写没有意义.
a++ 后 ++和--都返回临时变量, 是"右值"

是左值还是右值, 只要看他能不能被赋值就可以了.
至于const对象, 你非要用强制类型转换让他变成左值也不是不可以..
看了lvalue和rvalue的区...的网友还看了以下: