编程基础
完成条件
概述
一些编程语言使用 L 值和 R 值的概念,这源自赋值语句中左右两边典型的求值模式。L 值指的是一个在单个表达式之外仍然存在的对象。R 值则是一个临时值,它不会在使用它的表达式之外存在。
讨论
L 值和 R 值分别指代赋值运算符的左侧和右侧。L 值(发音:L value)概念要求赋值运算符左侧的操作数是可修改的,通常是一个变量。R 值概念则表示从赋值运算符右侧的表达式或操作数中取出值。以下是一些例子:
age = 39
值 39 是从右侧的表达式中取出(R 值),并存储到名为 age
的变量中(L 值),从而销毁该变量之前存储的值。
voting_age = 18
age = voting_age
如果赋值表达式右侧是一个变量或命名常量,那么它会从该变量或常量中取出值并存储。值 18 会从变量 voting_age
中取出并存储到变量 age
中。
age < 17
如果表达式是一个测试表达式或布尔表达式,概念上仍然是一个 R 值。在这种情况下,标识符 age
中的值会被取出并用于小于的关系比较。
JACK_BENNYS_AGE = 39
JACK_BENNYS_AGE = 65;
这是非法的,因为标识符 JACK_BENNYS_AGE
不具备 L 值属性。它不是一个可修改的数据对象,因为它是一个常量。
**L 值和 R 值的某些用法可能会让人困惑,尤其是在支持递增和递减运算符的语言中。**考虑以下情况:
oldest = 55
age = oldest++
后缀递增运算符表示先使用现有的值,然后在完成其他运算符后再递增。因此,第一次使用 oldest
变量时,它处于 R 值上下文中,现有值 55 被取出并赋值给变量 age
,这时是 L 值上下文。第二次使用 oldest
变量时,它处于 L 值上下文,变量 oldest
的值从 55 增加到 56。
关键术语
- L 值:赋值运算符左侧操作数的要求是可修改的,通常是变量。
- R 值:从变量或常量中提取存储的值。
参考文献
- cnx.org: 《编程基础 - 使用 C++ 的模块化结构化方法》
- Wikipedia: 《值(计算机科学)》
最后修改: 2025年01月10日 星期五 15:49