首页 > 解决方案 > 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 */
...

那么允许这样做有什么好处呢?这样做的唯一目的是i在全球区域增加是非法的吗?如果这是我认为这是对 C 中无法/难以解决的缺陷的补救措施的唯一原因,或者为了可读性,可能应该重写程序,对吧?

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

编辑:为了您宝贵的时间阅读 wth is locator value,这是我自制的 backronym

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

标签: c++c

解决方案


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

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

因此,对于泛型编程,将基本类型作为特例是不方便的。

例如;

auto &iter = ++old_iter;

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


推荐阅读