跳转到内容

编程基础/左值和右值

来自维基教科书,开放的书籍,为一个开放的世界

一些编程语言使用左值和右值的理念,源于赋值语句左侧和右侧典型的求值方式。左值是指在单个表达式之外持续存在的对象。右值是一个临时值,它在使用它的表达式之外不会持续存在。[1]

左值和右值指的是赋值运算符的左侧和右侧。左值(发音:L 值)的概念指的是赋值运算符左侧的操作数必须是可修改的,通常是一个变量。右值的概念指的是获取或提取赋值运算符右侧的表达式或操作数的值。一些例子

age = 39

值 39 被提取或获取(右值)并存储到名为 age 的变量中(左值);销毁之前存储在该变量中的值。

voting_age = 18
age = voting_age

如果表达式在赋值运算符的右侧有一个变量或命名常量,它将提取或获取存储在该变量或常量中的值。值 18 从名为 voting_age 的变量中提取或获取,并存储到名为 age 的变量中。

age < 17

如果表达式是一个测试表达式或布尔表达式,该概念仍然是一个右值。标识符名为 age 的值被提取或获取,并在小于的关系比较中使用。

JACK_BENNYS_AGE = 39
JACK_BENNYS_AGE = 65;

这是非法的,因为标识符 JACK_BENNYS_AGE 没有左值属性。它不是一个可修改的数据对象,因为它是一个常量。

在支持自增和自减运算符的语言中,左值和右值的一些用法可能会令人困惑。考虑

oldest = 55
age = oldest++

后缀自增表示在完成其他运算符后,使用我的现有值并自增。因此,oldest 变量的第一次使用是右值上下文,其中现有的值 55 被提取或获取,然后分配给变量 age;一个左值上下文。oldest 变量的第二次使用是左值上下文,其中 oldest 的值从 55 自增到 56。

关键词

[编辑 | 编辑源代码]
左值
赋值运算符左侧的操作数必须是可修改的,通常是一个变量。
右值
提取或获取存储在变量或常量中的值。

参考文献

[编辑 | 编辑源代码]
华夏公益教科书