C# 4.0 为什么这个整数不递增两次?
我被下面代码的结果弄糊涂了。为什么在执行这些操作时,“b”保留了一个看似不正确的值C# 4.0 为什么这个整数不递增两次?,c#-4.0,post-increment,C# 4.0,Post Increment,我被下面代码的结果弄糊涂了。为什么在执行这些操作时,“b”保留了一个看似不正确的值 int a = 0; int b = 5; a = b++; b = b++; Console.WriteLine("For b = b++; b=" + b.ToString()); // b should be 7 but it's 6 a = 0; b = 5;
int a = 0;
int b = 5;
a = b++;
b = b++;
Console.WriteLine("For b = b++; b=" + b.ToString()); // b should be 7 but it's 6
a = 0;
b = 5;
a = b--;
b = b--;
Console.WriteLine("For b = b--; b=" + b.ToString()); // b should be 3 but it's 4
a = 0;
b = 5;
a = b + 1;
b = b + 1;
Console.WriteLine("For b = b++; b=" + b.ToString());
输出
b=6
b=4
b=6
有人能解释C#中的这种行为以及它是如何工作的吗?这确实是后缀操作符的行为,如详细所述 例如,当您编写:
b = b++;
发生以下情况:
b
的当前值b
递增b
的保存值由后缀++
运算符生成b
因此,
b
确实将被分配其原始值,并且递增的值将丢失。指令a=b++存储在堆栈上,但不会进行计算,因为此后未使用它
要获得正确的结果,请使该指令对更改该行的示例有意义:
Console.WriteLine("For b = b++; b=" + b.ToString());
通过这一点:
Console.WriteLine("For a = b++; a=" + a.ToString());
Console.WriteLine("For b = b++; b=" + b.ToString()); //should give 7
因为
++
和--
运算符放置在值之后时,将计算为值本身,然后在计算后增加/减少值
因此:
运行此代码后,b
将等于0
,a
将等于1
这与使用运算符作为前缀不同:
int a = 0;
int b = ++a;
运行此代码后,b
将等于1
,a
将等于1
这是并且已经存在了。当您使用
int a = 0;
int b = 5;
a = b++;
b = b++;
你把a设为6,然后把b设为6。
当您将b写入命令行时,它显示为6,因为在递增b时从未使用a。
如果你也想使用a,你必须
int a = 1;
int b = 5;
b = b++;
b += a;
Console.WriteLine("For b = a + b++; b=" + b.ToString());
但总的来说,我看不出这种增量有任何用处。这是的行为,是的。最完美的答案可能是:而且,将增量分配给自身似乎根本上是错误的
b=b++
不会导致b++=1
,并且b=++b
是一种浪费。您确定它会将b的值设为7吗。如果我使用如上所示的“a”?
int a = 1;
int b = 5;
b = b++;
b += a;
Console.WriteLine("For b = a + b++; b=" + b.ToString());