gpt4 book ai didi

c# - 为什么++i 和 i++ 都会生成临时文件

转载 作者:太空宇宙 更新时间:2023-11-03 13:21:53 25 4
gpt4 key购买 nike

我记得在某处读到过,对于变量 int i,++i 和 i++ 在 C# 中生成了一个临时变量。有谁知道为什么会这样?它们的性能是否相同?

更新

所以从重复的Eric Lippert的回答来看,预增量的步骤如下:

对于预增

1) x is evaluated to produce the variable

2) the value of the variable is copied to a temporary location

3) the temporary value is incremented to produce a new value (not overwriting the temporary!)

4) the new value is stored in the variable

5) the result of the operation is the new value

为什么需要第 2 步?为什么不就地增加变量?

最佳答案

答案是:他们没有。不是标题所暗示的意思。

首先请注意:根据 Eric 的文章(令人惊讶的是,这篇文章受到了很多人的批评),在 C# 中预增量和后增量中发生的事件顺序是相同的。不仅相似,而且相同。同样的事情以同样的顺序发生。

其次,不存在这样的“临时对象”。 Eric 所指的“临时位置”是概念性的,但实际上对应于机器寄存器。一个值从内存复制到寄存器,该值递增,然后该值存储回内存。

但是还有另外一个方面。与 C/C++ 不同,C# 保证表达式求值的顺序。在 C# 中,以下代码是明确定义的,而在 C 中则不是。

j = ++i + i++;

但采取更简单的方法:

j = ++i + f(i); // first
j = i++ + f(i); // second

在第一种情况下,变量的值可用于后续表达式,但在第二种情况下则不能。相反,在以下函数调用中使用的第一个增量会产生一个概念上的临时值。在第二种情况下可以使用额外的寄存器。

关于c# - 为什么++i 和 i++ 都会生成临时文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23867423/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com