<分区>
完全重复:
希望这不是一个太笼统或太奇怪的问题。另外,在 Google 上找不到它,不知道这是一个太愚蠢的问题还是我在 Google 上失败了。
所以,我忘记了我从哪里读到的,但是它说使用“++x”(或任何其他变量)在某种程度上比“x++”更优化或者你可以称之为任何东西。
那么,这只是外观上的东西还是真的更快?就像,他们做完全一样的事情,这就是我问的原因。
标签 c#
<分区>
希望这不是一个太笼统或太奇怪的问题。另外,在 Google 上找不到它,不知道这是一个太愚蠢的问题还是我在 Google 上失败了。
所以,我忘记了我从哪里读到的,但是它说使用“++x”(或任何其他变量)在某种程度上比“x++”更优化或者你可以称之为任何东西。
那么,这只是外观上的东西还是真的更快?就像,他们做完全一样的事情,这就是我问的原因。
最佳答案
他们在做不同的事情。第一个是预增量,第二个是后增量。如果您在一条线上单独使用其中任何一个,您将不会注意到其中的区别。但是如果你这样做(例如):
a = x++
或
a = ++x
你会的。使用后增量,您获得值,然后增量。使用预递增,您递增,然后获取值。参见 http://en.wikipedia.org/wiki/++#Use_in_programming_languages简要说明(他们以JS为例,但它同样适用于C#)
编辑:根据大众需求(并驳斥一些夸张的说法),这里有一些关于 C++ 原语性能的内容。以这个示例程序为例:
int main()
{
int a;
int x = 14, y = 19;
a = x++;
a = ++y;
}
它在 x86 上将 (g++, just -S) 编译为以下代码。我删除了不相关的行。让我们看看发生了什么,看看是否正在制作不必要的副本。:
# Obvious initialization.
movl $14, -12(%ebp)
movl $19, -16(%ebp)
movl -12(%ebp), %eax # This is moving "old x" to the accumulator.
movl %eax, -8(%ebp) # Moving accumulator to a.
addl $1, -12(%ebp) # Increment x (post-increment).
addl $1, -16(%ebp) # Increment y (pre-increment)
movl -16(%ebp), %eax # Move "new y" to accumulator.
movl %eax, -8(%ebp) # Move accumulator to a.
我们完成了。
如您所见,在此示例中,每种情况都需要完全相同的操作。恰好 2 movl 和 1 addl。唯一的区别是顺序(惊讶?)。我认为这是完全使用 increment 语句的值的典型示例。
关于c# - 在更优化的 C# 中,如果这是正确的词 :++x or x++?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/861104/