C和C ++中的前缀递增运算符之间的区别

时间:2018-11-21 13:39:21

标签: c++ c

我刚刚读了C reference about prefix increment operator,意识到前缀增量运算符的结果不是lvalue,但是令人惊讶的是,它在C ++中是lvalue。之后,我读了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缺陷的一种补救措施,或者可能出于可读性考虑而应该重写程序,对吗?

btw我不明白为什么左值也称为“定位符值”,我读过this - line 4,但是定位符对我来说是模糊的。什么是定位器,它是指针吗?

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

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

如果发生任何错误,请不要怪我。

1 个答案:

答案 0 :(得分:7)

在C ++中,给定左值的前缀++实际上是很自然的。

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

因此对于通用编程,将基本类型设置为特殊情况将很不方便。

例如;

auto &iter = ++old_iter;

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