【问题标题】:Which method of incrementing should I use in C#? ++i or i++? [duplicate]我应该在 C# 中使用哪种递增方法? ++我还是我++? [复制]
【发布时间】:2013-09-25 10:42:32
【问题描述】:

例如

for (int i = 0; i < 10; ++i) 
...

对比

for (int i = 0; i

有人告诉我 ++i 会更有效率。其他语言(例如 JavaScript)是否存在差异,还是更基本的规则?

【问题讨论】:

  • 在这种情况下,i++++i 相同...它们之间的主要区别在于后增量与前增量
  • 自从 Scott Meyers 写了“Effective C++”以来,被问了一百万次并讨论了令人作呕的问题。来吧。

标签: c# loops increment


【解决方案1】:

i++ 和 ++i 的区别在于表达式的值。

值 i++ 是增量前 i 的值。 ++i 的值为 i 递增后的值。

但是在你的循环中它没有任何区别。

int i = 0;
00000088  xor         edx,edx 
0000008a  mov         dword ptr [ebp-40h],edx 
            i++;
0000008d  inc         dword ptr [ebp-40h] 
            ++i;
00000090  inc         dword ptr [ebp-40h] 

【讨论】:

    【解决方案2】:
    for(int i=0;i<10;i++)
    {
     //some jobs
    }
    

    等同于:

    int i=0;
    while(i<10)
    {
     //some jobs
       i++;
    }
    

    for(int i=0;i<10;i++)
    {
     //some jobs
    }
    

    等于:

    int i=0;
    while(i<10)
    {
     //some jobs
       ++i;
    }
    

    所以这里没有区别,性能是一样的

    i++ 是后增量,++i 是前增量,因此在其他情况下存在差异,但在性能上没有差异。你可以在这里阅读更多关于前后增量的信息C# Pre- & Post Increment confusions

    【讨论】:

      【解决方案3】:

      在某些语言中使用 ++i 的优点是它不会不必要地创建临时文件(例如,有关 C++ 的详细说明,请参阅 Exceptional C++)。

      【讨论】:

        【解决方案4】:

        如果您不在同一个表达式中分配结果,++i 的效率并不比 C# 中的 i++ 高。两种情况都会生成相同的代码。

        当然,如果您将结果分配给同一个表达式中的某些内容, 生成的代码会有所不同 - 但在这种情况下,语义是不同的,您没有选择使用哪种增量形式。

        所以使用你最喜欢的那个。

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2014-06-22
          • 2013-07-12
          • 2023-03-27
          • 2010-12-06
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多