有时称为“l 值”的地址

Lur*_*pai 0 c++ lvalue value-categories

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

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

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

编辑:教科书一般是关于编程语言的,而不是专门针对 C 或 C++。对混乱表示歉意。

Kei*_*son 5

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

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

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

一个左值(所谓的,历史上,因为左值可以出现在赋值表达式的左侧)表示一函数或一个对象。

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

当术语 "lvalue" 和 "rvalue" 首次被发明时,它们指的是可以出现在赋值左侧 ('l') 或右侧 ('r') 的东西。在原始含义中,像这样的表达式x可以“为其左值求值”,这意味着它标识名为 的对象x,或“为其右值求值”,这意味着它检索当前存储在 中的值x。C 和 C++ 标准已经改变了术语的含义,因此“左值”是一个表达式,而不是计算它的结果。

(话虽如此,C++11 标准中讨论所有这些的部分可能有点含糊,有些措辞可能表明左值可能是对表达式求值的结果。)