c# - 在更优化的 C# 中,如果这是正确的词 :++x or x++?

标签 c#

<分区>

完全重复:

In C# what is the difference between myint++ and ++myint?

希望这不是一个太笼统或太奇怪的问题。另外,在 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/

相关文章:

c# - 为什么对通用列表的显式转换不起作用

c# - Visual Studio 安装项目

c# - 如何在 C# 中应用重命名方法来更改带有 get/set 的名称?

c# - 我可以在 List<T> 中使用匿名类型而不是辅助类吗?

c# - 使用 AccountManagement 扩展类时如何设置二进制属性?

c# - 在运行时更新 NLog 目标文件名

c# - 如何使用c#在apache drill中显示来自sql server的数据

c# - 让柱形图在图表控件中重叠

c# - 将不存在的多个文件拖放到资源管理器

c# - 无法读取 Entity Framework 中的系统 View