显然是在阅读了旧标题之后
为什么
is ++i fster than i+=1甚至存在这样的问题
人们没有费心去彻底阅读这个问题.
问题不在于人们提出这个问题的理由!这是关于为什么编译器会在++i和之间产生差异的原因i+=1,并且是否有任何可能的情况才有意义.虽然我很欣赏你所有的诙谐和深刻的评论,但我的问题并非如此.
好吧,好吧,让我试着用另一种方式提出问题,我希望我的英语足够好,这次我可以表达自己而不会被误解,所以请阅读.让我们说有人在一本10年前的书中读到这篇文章:
使用++ i over i = i + 1可以获得性能优势.
我并不热衷于这个特定的例子,而是更多或更少地谈论.
显然,当作者写这本书时,对他来说是有道理的,他不仅仅是弥补了这一点.我们知道现代编译器不关心你是否使用++i,i+=1或者i = i + 1代码将被优化,我们将具有相同的asm输出.
这似乎很合乎逻辑:如果两个操作执行相同的操作并且具有相同的结果,则没有理由编译++i成一个东西,而是i+=1另一个东西.
但是自从这本书作者写下来之后,他已经看到了它的不同之处!这意味着某些编译器实际上会为这两行产生不同的输出.这意味着,由编译器的家伙有一些原因,治疗++i和i+=1不同.我的问题是他们为什么会这样做?
是不是因为那些日子很难/不可能使编译器足够先进以进行这样的优化?或者,也许在一些非常具体的平台/硬件/在某些特殊情况下它实际上是有意义的,使之间的差异++i,并i+=1和其他同类的东西?或者它可能取决于变量类型?或者编译器开发者只是懒惰?