我有时会对速记增量操作感到困惑.
因为当我在BASIC中进行小编程时,我得到了一些如何坚持使用a = a + 1,这是一种长期痛苦的方式,即"获取当前值,为其添加1,然后将新值存储回'.
1] a = a +1 ;
2] a++ ;
3] ++a;
4] a +=1;
Run Code Online (Sandbox Code Playgroud)
[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
Run Code Online (Sandbox Code Playgroud)
met*_*ngs 18
区别在于运营商返回的内容:
该职位 -Increment运营商"一加再加补充说:"一个,并返回旧值:
int a = 1;
int b = a++;
// now a is 2, b is 1
Run Code Online (Sandbox Code Playgroud)
该预 -Increment操作"加加上一个"加一,并返回新值:
a = 1;
b = ++a;
// now a is 2 and b is 2
Run Code Online (Sandbox Code Playgroud)
首先,你应该仔细阅读这个答案:
并仔细阅读此博客文章:
http://blogs.msdn.com/b/ericlippert/archive/2011/03/29/compound-assignment-part-one.aspx
请注意,该帖子的第二部分是愚人节的笑话,所以不要相信它说的任何内容.第一部分是严肃的.
那些应该回答你的问题.
当你只有一个普通的局部变量时,这些陈述x++; ++x; x = x + 1; x += 1;基本上都是一样的.但是一旦你偏离了普通的局部变量,事情变得更加复杂.这些行动对他们来说是微妙的.