C#中的前后递增/递减运算符

时间:2008-10-06 12:59:56

标签: c#

在C#中,是否有人知道为什么会编译以下内容:

int i = 1;
++i;
i++;

但这不会编译?

int i = 1;
++i++;

(编译器错误:增量或减量运算符的操作数必须是变量,属性或索引器。)

4 个答案:

答案 0 :(得分:19)

你正在运行另一个操作数的一个操作数,增量/减量的结果是一个值 - 并且你不能对一个值使用递增/递减它必须是一个可以设置的变量。

答案 1 :(得分:9)

出于同样的原因你不能说

5++;

f(i)++;

函数返回,而不是变量。增量运算符也返回值,但不能应用于值。

答案 2 :(得分:3)

我的猜测是++ i返回一个整数值类型,然后尝试应用++运算符。看到你无法写入值类型(想想0 ++,如果这有意义),编译器将发出错误。

换句话说,这些语句被解析为这个序列:

++i  (i = 2, returns 2)
2++  (nothing can happen here, because you can't write a value back into '2')

答案 3 :(得分:-3)

我的猜测:避免这种丑陋和不必要的结构。此外,它将使用2个操作(2x INC)而不是1个(1x ADD 2)。

是的,我知道......“但我希望增加两倍,而且我是一个33.3 g33k!”

好吧,不要成为一个极客并写下一些看起来不像是无意的错误的东西,比如:

i += 2;