我有时会对速记增量操作感到困惑。
因为当我在BASIC中进行小编程时,我得到了一些如何坚持使用a = a + 1,这是一种长期痛苦的方式,说'获取当前值,为其添加1然后将新值存储回' 。
1] a = a +1 ;
2] a++ ;
3] ++a;
4] a +=1;
[1]和[4]在功能上有不同的符号,对吗?
由于增量符号++之前和之后的事实,2]和3]的工作方式完全不同。正确?
我可以安全地假设下面的内容吗?
int f(int x){ return x * x;}
y = f(x++) -> for x =2, f(x) = x^2
f(x) ======> y= 2^2 =4
x=x+1; ======> x= 2+1 = 3
y = f(++x) -> for x =2, f(x) = x^2
x=x+1 ===========> x = 2+1 = 3
f(x) ===========> y =3^2 = 9
答案 0 :(得分:18)
区别在于操作员返回的内容:
帖子 -increment运算符“a plus plus”添加一个,并返回旧值:
int a = 1;
int b = a++;
// now a is 2, b is 1
pre -increment运算符“plus plus a”添加一个,并返回 new 值:
a = 1;
b = ++a;
// now a is 2 and b is 2
答案 1 :(得分:7)
首先,您应该非常仔细地阅读 :
What is the difference between i++ and ++i?
非常仔细地阅读
这篇博文http://blogs.msdn.com/b/ericlippert/archive/2011/03/29/compound-assignment-part-one.aspx
请注意,该帖子的第二部分是愚人节的笑话,所以不要相信它说的任何内容。第一部分是严肃的。
那些应该回答你的问题。
当你只有一个普通的局部变量时,语句x++; ++x; x = x + 1; x += 1;
基本上都是一样的。但是一旦你偏离了普通的局部变量,事情变得更加复杂。这些行动对他们来说是微妙的。
答案 2 :(得分:1)
1],3]和4]在功能上相同 - a
加1,整个表达式的值是a
的 new 值。
2]与其他人不同。它也会增加a
,但表达式的值是a
的之前值。