首页 > 解决方案 > 地址是否有时被称为“左值”

问题描述

在我的编程语言课上学习考试。在教科书上看到了这段摘录。

“变量的地址有时称为它的左,因为当变量的名称出现在赋值的左侧时,地址是必需的。”

在大学以外的几年里,我一直在自己的时间学习 C++,至少价值类别的主题足够复杂,以至于我不得不多次复习它才能在我的脑海中有所了解,并且仍然需要打开 cppreference 页面来查看较新的类别。至少这似乎是一个巨大的过度简化。这只是错误的吗?还是我从未遇到过这种对 l 值的使用?

编辑:教科书一般是关于编程语言的,而不是具体的 C 或 C++。为混乱道歉。

标签: c++lvaluevalue-categories

解决方案


“左值”或“左值”的含义有着悠久而复杂的历史。在该术语的一些较早的定义中,这句话是正确的——但它与 C++ 标准定义它的方式不一致。如果你的教科书是在讨论 C++,那这段话是有问题的。如果它是在讨论一般的编程,那可能没问题。

在 C++(以及 C)中,左值不是值。它是一种表达式,即可以出现在 C++ 源代码中的构造。它是表达式本身,而不是评估它的结果。

C++11标准中的定义是:

左值(历史上称为左值,因为左值可能出现在赋值表达式的左侧)指定函数或对象。

该定义是在对表达式进行分类的上下文中。

最初发明术语“左值”和“右值”时,它们指的是可以出现在赋值左侧('l')或右侧('r')的事物。在最初的含义中,一个表达式 likex可以“针对其左值求值”,这意味着它标识了名为 的对象x,或者“针对它的右值求值”,这意味着它检索当前存储在 . 中的值x。C 和 C++ 标准改变了术语的含义,因此“左值”是一个表达式,而不是评估它的结果。

(话虽如此,C++11 标准中讨论所有这些的部分可能有点模糊,并且有一些措辞可能暗示左值可能是评估表达式的结果。)


推荐阅读