【发布时间】:2011-04-05 15:34:41
【问题描述】:
我经常看到这个运算符 (++)。我知道它最终会做什么,但似乎有些规则我不明白。例如,将它放在使用它的变量之前还是之后似乎很重要。有人可以解释一下吗?
【问题讨论】:
我经常看到这个运算符 (++)。我知道它最终会做什么,但似乎有些规则我不明白。例如,将它放在使用它的变量之前还是之后似乎很重要。有人可以解释一下吗?
【问题讨论】:
声明
x++;
完全等价于
x = x + 1;
除了 x 只被计算一次(如果它是一个涉及属性 getter 的表达式,这会有所不同)。
以下两者的区别:
DoSomething(x++); // notice x first, then ++
DoSomething(++x); // notice ++ first, then x
在第一个中,方法DoSomething 将看到x 的previous值之前它被增加了。在第二个中,它将看到 new(增加的)值。
有关详细信息,请参阅 MSDN 上的C# Operators。
可以为您自己的类声明自定义++ 运算符,在这种情况下,运算符可以做一些不同的事情。如果要定义自己的 ++ 运算符,请参阅 MSDN 上的 Operator Overloading Tutorial。
【讨论】:
x 只被评估一次" - 抱歉,你错了。 x++ 和 x = x + 1 实际上是完全等价的。请注意,在后一种情况下,x 也仅被评估一次。然后是 set,这也发生在 x++ 中。 (当然,我的评论是指将运算符用作语句,而不是作为另一个调用的一部分,在这种情况下,function(x++) 和 function(x = x + 1) 显然表现不一样)
myObj.SomeProperty.SomeValue++,那么SomeProperty getter 只会被调用一次,但如果你写myObj.SomeProperty.SomeValue = myObj.SomeProperty.SomeValue + 1,那么它会被调用两次。
http://msdn.microsoft.com/en-us/library/36x43w8w(v=VS.80).aspx
自增运算符 (++) 将其操作数加 1。自增运算符可以出现在其操作数之前或之后:
第一种形式是前缀递增操作。运算的结果是操作数自增后的值。
第二种形式是后缀递增操作。运算的结果是操作数在递增之前的值。
【讨论】:
如果您将++ 运算符放在变量之前,则它首先递增。
如果将++ 运算符放在变量后面,则变量后面递增。
例如(C#):
int x = 0;
Console.WriteLine("x is {0}", x++); // Prints x is 0
int y = 0;
Console.WriteLine("y is {0}", ++y); // Prints y is 1
希望这可以解决问题。
【讨论】:
如果你这样说的话
variable++
它首先使用变量并递增它(+1) 另一方面,如果你
++variable
它首先增加变量然后使用它
【讨论】:
另一种看待它的方式...这里有两个功能与前缀/后缀++相同。这说明前缀在理论上更快,因为不需要临时变量来存储“先前”值:
// same as x ++;
int PostfixIncrement(ref int x)
{
int y = x;
x = x + 1;
return y;
}
// same as ++ x;
int PrefixIncrement(ref int x)
{
x = x + 1;
return x;
}
【讨论】:
如果将 ++ 运算符放在变量之前,则它首先递增。如果将 ++ 运算符放在变量后面,则变量后面递增。
例如(C#):
int x = 0; Console.WriteLine("x 是 {0}", x++); // 打印 x 为 0
int y = 0; Console.WriteLine("y 是 {0}", ++y); // 打印 y 是 1
【讨论】:
i=i++ 表示您先递增,然后再将旧值分配回去,从而使操作无用。 i=++i 与简单的++i 具有相同的效果。