上图显示了具有两个分支的变量i,这两个分支分别名为lvalue和rvalue.

变量的lvalue是指存储变量的内存地址。变量lvalue总是被解释为内存地址,是location value 的简写。

变量rvalue是指当前存储在变量中的实际值,代表register value。当定义一个变量时,lvalue先被赋值,值是分配的地址号。当对变量赋值时,rvalue被赋值,值就是被赋予的实际值。同时,lvalue与rvalue可以理解成变量的左右值,即left value和right value。

举例来说,语句

int i;

i = 10;

是创建了一个名为i的整型变量,赋值10。那么当执行int i时

左值被填入一个900000,这就是分配的地址。

当执行 i = 10时

右值填入了10这个实际的值。

桶模拟(bucket analogy)有助于理解变量的左右值。

执行以下语句:

int val;

visual studio会向内存管理系统发送请求,为定义的int类型开辟一个4字节的空闲内存。假设一切正常,申请响应,内存管理系统开辟了750000这个地址,并将这个地址号返回赋值给lvalue中。

桶模拟假设有一些空桶放在地上,桶的大小不相同,有的能放1字节,有的能放16字节。这里定义int,那么此时的桶能放4字节。现在给桶标号,本例中桶的名字叫val,那么假设这个桶放到计算机中,并将它放在内存地址750000的位置上。就可以看到

桶的lvalue表明从何处找到桶,而桶的rvalue表明桶中装的数据。