
左值与右值在C/C++中表示位于赋值运算符两侧的两个值,赋值号左边的就叫左值(left-value),右边的就叫右值(right-value)。 比如:(1) int b = 3;(2) int a = b;第(2)行代码,a为左值,b为右值。不过左值与右值的含义有了更深层次的含义:L-value中的L指的是Location,表示可寻址。a value (computer science)that has an address.R-value中的R指的是Read,表示可读。in computer science, a value that does not have an address in a computer language.
>定义
左值(lvalue)和右值(rvalue)最先来源于编译。在C语言中表示位于赋值运算符两侧的两个值,左边的就叫左值,右边的就叫右值。
它们的定义是:
左值,指的是如果一个表达式可以引用到某一个对象,并且这个对象是一块内存空间且可以被检查和存储,那么这个表达式就可以作为一个左值。
右值,指的是引用了一个存储在某个内存地址里的“数据”。
从上面的两个定义可以看出,左值其实要引用一个对象,而一个对象在我们的程序中又肯定有一个名字或者可以通过一个名字访问到,所以左值又可以归纳为:左值表示程序中必须有一个特定的名字引用到这个值。而右值引用的是地址里的内容,所以相反右值又可以归纳为:右值表示程序中没有一个特定的名字引用到这个值除了用地址
>基本描述
在《C专家编程(中文版)》中第4章,对左值和右值的基本描述。
而右值则是只可以放在赋值操作符右边的值,比如:
int a = 0;
char *b = "hello";
3 = a; // ERROR
"howdy" = b // ERROR
这里3和"howdy"都是右值,所以不能放在赋值操作符左边,一切常数、字符和字符串都是右值。