【问题标题】:Objective-C: Mixed methods of incrementing - i++ vs i+=1Objective-C:混合的递增方法 - i++ vs i+=1
【发布时间】:2012-07-10 00:19:52
【问题描述】:

我在 github 上浏览 GNUstep project 时遇到了这个小循环...

for(; i < 9; i+=1)
{
  for(;j < 9; j+=1)
  {
      /* Inner loop code - snipped */
  }
}

大部分,但不是全部增量操作是在源代码中使用 '+=1' 完成的;如果它是一致的,这将是有道理的。如果它是一致的,我会把它归结为简单的个人喜好,甚至是可读性。

但是,对于一个似乎是由一个人完成的项目(毕竟这是一个简单的数独游戏),增量操作的不同风格让我有点好奇。

for(; i<10; i++)
{
  /* inner loop code - snipped */
}

现在我已经阅读了this question,它证实了我的怀疑 - 无论使用何种语法,编译器都应该生成相同的低级代码

这让我开始思考这是最佳实践还是风格指南,但同一位编码员使用了这两种递增方法。就我个人而言,我不假思索地使用 'i++' - 我猜这对于任何编码人员来说都是很自然的,您几乎不假思索地输入它。

我错过了什么还是“只是因为”?有什么理由混合使用这两种类型的递增?如果它们都编译为相同的 ASM,那么我会假设没有一种情况会比另一种性能更好。

【问题讨论】:

  • 这取决于您的编译器,因为任何体面的编译器都会将它们优化为完全相同的程序集。

标签: objective-c gnustep


【解决方案1】:

这通常发生在有几个程序员,每个人都有自己的编码偏好,并且项目没有强制执行严格的编码风格时。

没有区别。

【讨论】:

  • 其实++和+=是有区别的,只是在这个场景中没有
  • 是的,我也是这么想的——只是让我对它是一个单人项目感到好奇! @RichardJ.RossIII,您愿意详细说明一下吗? :) 你现在已经让我的好奇心超出了规模! :P
【解决方案2】:

在这种情况下,它们是等价的,你说得对,对于任何好的编译器,生成的程序集都应该是等价的。

另外请注意,这并不是 Objective-C 特有的。 Objective-C 基于 C,因此它与任何 C 代码完全相同。

【讨论】:

  • 是的,我可能也应该将它标记为 C!
【解决方案3】:

如果这是一个单人项目,最可能的原因是程序员只是在中途改变了使用哪种风格的想法。

【讨论】:

  • 他们确实说最简单的解释往往是最好的!
【解决方案4】:

如果“一个人”发现一个循环达到了他在其他项目中的预期并懒惰地复制粘贴它,甚至没有更改 += 或 ++(取决于他使用什么)怎么办?

在使用其中一个或另一个时,我脑海中可能会出现的唯一区别是在遍历您链接的问题中指出的数组时。

【讨论】:

  • 是的,那是另一种可能性。我只是想知道是否有“适当”的理由;唉 - 它看起来不像!
猜你喜欢
  • 2014-02-22
  • 1970-01-01
  • 2022-07-20
  • 2018-06-21
  • 2020-03-23
  • 2020-05-24
  • 2018-05-21
  • 2018-08-20
相关资源
最近更新 更多