31

在 C++ 中,预增量运算符给出左值,因为返回的是递增的对象本身,而不是副本。但在 C 中,它给出了右值。为什么?

4

3 回答 3

18

C 没有引用。在 C++++i中返回对i(左值)的引用,而在 C 中,它返回一个副本(增量)。

C99 6.5.3.1/2

前缀 ++ 运算符的操作数的值递增。结果是递增后操作数的新值。表达式 ++E 等价于 (E+=1)。

‘‘value of an expression’’ <=> rvalue

然而,由于历史原因,我认为“引用不是 C 的一部分”可能是一个可能的原因。

于 2011-01-26T08:05:05.557 回答
3
于 2011-01-26T08:00:44.577 回答
2

在我的脑海中,我无法想象使用预增量变量作为左值会产生任何有用的语句。在C++中,由于存在运算符重载,我可以。由于此限制,您是否有特定示例说明您无法在 C 中执行某些操作?

于 2011-01-26T07:58:59.197 回答