C和C++中前缀增量运算符之间的差异

Bin*_*eee 7 c c++

我刚刚阅读了关于前缀增量运算符C引用,并意识到前缀增量运算符的结果不是左值,但令人惊讶的是它在C++中是左值.之后我读了这个答案,解释了为什么它是一个左值,但我不明白它:

(第3行):["]看起来它是这样你可以取其地址或分配给参考.[."]

以下是一个例子:

int i;
extern void f (int* p);

f (&++i);   /* Would be illegal C, but C programmers
              havent missed this feature */
...
Run Code Online (Sandbox Code Playgroud)

那么允许这个有什么好处呢?i在全球范围内增加的唯一目的是非法的吗?如果这是我认为这可以解决C中缺陷(无法/难以解决)的唯一原因,或者为了可读性而应该重写程序,对吧?

顺便说一句我不明白为什么左值也被称为"定位器值",我读过这个 - 第4行,但定位器对我来说很模糊.什么是定位器,它是指针吗?

编辑:为了您宝贵的时间阅读关于wth是定位器值,这是我自制的backronym:

  • 左值:位置值,你知道它的位置.
  • rvalue:读取值,您只能读取该值.

如果出了什么问题,不要怪我.

lll*_*lll 7

在C++中,++赋予左值的前缀实际上非常自然.

因为C++有运算符重载.对于可能复杂类型的大多数迭代器,前缀++返回迭代器本身的左值.

因此,对于通用编程,将基本类型作为特殊情况是不方便的.

例如;

auto &iter = ++old_iter;
Run Code Online (Sandbox Code Playgroud)

如果指针的前缀增量给出一个右值,则不起作用.