同时预增量和后增量或混合前置增量

Arm*_*ian 2 c#

可能重复:
C#中的前后递增/递减运算符

请考虑以下简单代码段:

int x = 0;
int y = ++x + 1; // forks fine, gives y 2 (no doubt :) )

int x = 0;
int y = ++x++; // Error: The operand of an increment or decrement operator must be a variable, property or indexer.
Run Code Online (Sandbox Code Playgroud)

很明显,在同一语句中混合前/后增量或减量对于编译器来说并不是一个理想的特性.

  1. 事实上,是不是++x++一样的++x + 1?甚至考虑到Eric Lippert 在这里发现的所有细微之处.它们都是关于行为而不是与操作数的关系以及CSC输出的消息.
  2. 事实上,x是不是变量?就像,在++x + 1那个版本中,操作数是相同的x.它同样适用于预增量运算符++.所以这仍然是一个有用的限制似乎有点奇怪的编译器错误.输出是否更有意义,比如说,"预增量和后增量运算符不能同时应用?
  3. 你们知道这个限制的任何隐藏的编译器视角原因,而不是代码可用性吗?

p.s*_*w.g 5

(x ++)或(++ x)的结果实际上不是变量.这是一个价值,所以:

int y = (++x) + 1;
// evaluates to
int y = (1) + 1;
Run Code Online (Sandbox Code Playgroud)

int y = ++x++;
// is equivalent to 
int y = ++(x++);
// evaluates to
int y = ++(0);
Run Code Online (Sandbox Code Playgroud)