为什么'bicrement'不可能这样?

Luc*_*Luc 1 language-agnostic increment

为什么这不可能?

int c = 0;
++c++;
Run Code Online (Sandbox Code Playgroud)

或者在PHP中:

$c = 0;
++$c++;
Run Code Online (Sandbox Code Playgroud)

我希望它将变量c递增2,或者做一些奇怪的事情,但是编译时会出错.我试图提出一个理由,但没有真正得到......我的推理是这样的:

  1. 编译器读取++
  2. 它读取变量
  3. 它执行任何操作以使变量的值增加,然后在执行应用程序时返回
  4. 它遇到了另一个++
  5. 它使用前一个变量,以便在递增值之前返回它
  6. 这是令人困惑的地方:它是使用变量c,还是尝试读取(++ c)返回的值?或者,既然你只能做varname ++(而不是2 ++),它会看到(++ c)作为指针,然后尝试读取那个内存位置吗?无论它做什么,为什么会出现编译错误?或者是预防错误,因为编译器的程序员知道它不会做任何有用的事情?

我并不是真的希望使用它,当然不是仅仅用于一次性使用的代码,但我只是好奇.

Ry-*_*Ry- 6

出于同样的原因你不能这样做:

c++ = 5;
Run Code Online (Sandbox Code Playgroud)

它返回一个值,该值不能修改也不能分配给.这也不是运行时错误 - 这是编译错误.(像这个.)

返回引用也没有意义,因为那样:

$a = 1;
$b = $a++; // How can it be a reference if b should be 1 and a should be 2?
Run Code Online (Sandbox Code Playgroud)