我刚刚读了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 :
如果发生任何错误,请不要怪我。
答案 0 :(得分:7)
在C ++中,给定左值的前缀++
实际上是很自然的。
因为C ++具有运算符重载。对于大多数可能具有复杂类型的迭代器,前缀++
返回迭代器本身的左值。
因此对于通用编程,将基本类型设置为特殊情况将很不方便。
例如;
auto &iter = ++old_iter;
如果指针的前缀增量给出右值,将不起作用。