为什么有前缀/后缀++但没有前缀/后缀+ =?

tem*_*def 3 c c++ java operators

这似乎是一个愚蠢的问题,但为什么它在许多语言中存在的前缀和后缀版本++--运营商,但其他运营商如中没有类似的前缀/后缀版本+=-=?例如,似乎我可以编写此代码:

myArray[x++] = 137; // Write 137 to array index at x, then increment x
Run Code Online (Sandbox Code Playgroud)

我应该能写出类似的东西

myArray[5 =+ x] = 137; // Write 137 to array index at x, then add five to x
Run Code Online (Sandbox Code Playgroud)

当然,这样的运营商不存在.是否有一个原因?这似乎是C/C++/Java中一种奇怪的不对称.

Mic*_*urr 6

我猜有几个原因,我认为权重越大可能是:

  • 可能没有被认为是太多真实的用例(在早期甚至可能没有发生过一些语言设计者)
  • 前/后增量直接映射到机器操作(至少在几台机器上),因此他们找到了进入语言的方式(更新:事实证明这并不完全正确,即使它在计算传说中通常也是如此.下面).

然后,虽然前/后/递增/递减运算符的想法可能已经受到机器操作的影响,但看起来它们并没有专门用于语言以利用它.以下是Dennis Ritchie对他们的看法:

http://cm.bell-labs.com/cm/cs/who/dmr/chist.html

汤普森更进一步发明了++和 - 运算符,它们递增或递减; 它们的前缀或后缀位置确定更改是在注意操作数的值之前还是之后发生.它们不是B的最早版本,而是沿途出现.人们经常猜测它们是为了使用DEC PDP-11提供的自动递增和自动递减地址模式而创建的,C和Unix首先在这种模式下流行起来.这在历史上是不可能的,因为在开发B时没有PDP-11.然而,PDP-7确实有一些"自动增量"存储器单元,其特性是通过它们的间接存储器引用增加了单元.这个功能可能会向Thompson建议这样的操作员; 使它们成为前缀和后缀的概括是他自己的.实际上,自动增量单元并没有直接用于运算符的实现,而且创新的更强烈动机可能是他观察到++ x的翻译小于x = x + 1的翻译.