【发布时间】:2018-11-21 13:39:20
【问题描述】:
我刚看了C reference about prefix increment operator,发现前缀自增运算符的结果不是左值,但在C++中却是左值,令人惊讶。之后我读了this answer,它解释了为什么它是一个左值,但我不明白:
(第 3 行):["] 看起来是这样,因此您可以获取其地址或分配给引用。[."]
下面是一个例子:
int i; extern void f (int* p); f (&++i); /* Would be illegal C, but C programmers havent missed this feature */ ...
那么允许这样做有什么好处呢?这样做的唯一目的是在全球区域增加i 是非法的吗?如果这是我认为这是对 C 中无法/难以解决的缺陷的补救措施的唯一原因,或者为了可读性可能应该重写程序,对吧?
顺便说一句,我不明白为什么左值也被称为“定位器值”,我读过this - line 4,但定位器对我来说是模糊的。什么是定位器,是指针什么的吗?
编辑:为了您宝贵的时间阅读 wth is locator value,这里是我的 自制 backronym:
- lvalue:位置值,你知道它的位置。
- rvalue:读取值,只能读取值。
如果出了什么问题,别怪我。
【问题讨论】:
-
有趣的观察。我冒昧地猜测,如果您深入研究运算符重载,那么这种类型的用法可能是有意义的。这可以解释为什么它是 C++ 而不是 C 的一部分。
-
相关/欺骗:stackoverflow.com/questions/371503/…。我认为最佳答案是我见过的最好的推理。 IT 不可能在 C 中做到这一点,因为 C 没有引用,但 C++ 有,所以这将是一个自然的扩展。
-
我以前从未见过“定位器值”,并怀疑它是一个反义词。据我所知,左值和右值最初是指赋值表达式的左右两边。
-
@TimRandall 居然是C99标准,让我吃惊。
-
@NathanOliver r 值是否有相应的“含义”?