【发布时间】:2015-08-29 09:42:21
【问题描述】:
看起来这是一个非常奇怪的问题,因为我已经阅读了很多文档,其中递增和递减是一元运算,没有任何解释。
我可能是错的,但++i 与i+=1 相似(如果没有任何覆盖):
int i = 1;
Console.WriteLine(++i); // 2
int j = 1;
Console.WriteLine(j+=1); // 2
在这种情况下,前置增量是简单的语法糖,用于隐藏二元运算符 plus 和 1 作为第二个参数。
不是吗?
为什么自增和自减是独立的一元运算,难道它不只是二元加运算符,带有预定义的第二个参数,值为1吗?
【问题讨论】:
-
它们是一元的,因为只涉及一个操作数:要增加或减少的东西。它是否只是语法糖取决于语言。在 C++ 中,这些运算符可能有不同的语义。
-
因为它是如此常见的操作,人们懒得省略第二个操作数。请注意
++i和i++之间存在差异,因此它通常允许更短的代码。 -
好问题。太糟糕了,这不是一个编程问题!
-
另一个原因可能是用于原始 C 编译器的 PDP 计算机具有自动递增和自动递减寻址模式,使得
i++在某些情况下是免费的。例如,使用i += 2需要单独的指令。 -
注意:对于用户类型,在 C++ 中,
++x和x+=1可能调用不同的函数。