优化代码:比p ++快++?

时间:2012-03-29 21:14:51

标签: c++ performance

  

可能重复:
  Is there a performance difference between i++ and ++i in C++?

C++中,我看到人们经常在++p循环或其他地方使用for,您希望在其中增加值,但不使用返回值。我听说这更有效,因为p++在递增之前返回值,因此需要一个临时空间。

但是,感觉即使是非常无知的编译器也会将返回值作为死代码(只要内联增量代码,因此编译器可以看到返回值不是必需的)。

我试图想出一个很好的例子,使用某种迭代器,iter++实际上会创建副本(即使没有使用iter++的返回值。

毕竟,当我们用迭代器编写代码时,我们并不经常考虑寄存器分配。

我学会了使用p++,因为这就是我从中学到的那本书。当没有使用返回值的古老实践时,或者只是优雅编码的一部分时,更喜欢++p吗?为什么语言不被称为++C呢?

2 个答案:

答案 0 :(得分:5)

p++仅在++p无法完成工作时才会变慢 - 即实际使用返回值时。否则,编译器会将代码优化为同样的东西。

人们更喜欢使用++i而不是i++,因为它更好地描述了您打算做的事情:增加i,增加i以及返回旧值。当然,你倾向于坚持旧习惯。如果您习惯于撰写i++,那没关系,除非您所使用的公司的编码标准要求您使用++i

  

D& E的第3章:``我选择了C ++,因为它很短,很好   解释,并不是“形容词C”的形式。'在C中,++可以,   根据上下文,可以读作“下一个”,“后继者”或“增量”,   虽然它总是发音为“plus plus”。名称C ++及其   亚军++ C是笑话和双关语的肥沃来源 - 几乎全部   在选择名称之前已知并赞赏。名字   Cick由Rick Mascitti提出。它于12月首次使用   1983年,它被编辑成[Stroustrup,1984]和   [Stroustrup的,1984c。

     

TC ++ PL的第1章:``C ++这个名字(发音为   “看加号”是由里克·马斯基蒂在1983年夏天创造的。   该名称表示C变化的进化性质; “++”   是C增量运算符。稍短的名字“C +”是一个   语法错误;它也被用作无关的名称   语言。 C语义的鉴赏家发现C ++不如++ C.该   语言不称为D,因为它是C的扩展,它确实如此   不要试图通过删除功能来解决问题。对于另一个   解释C ++的名称,参见[Orwell,1949]的附录。''

Sauce.

答案 1 :(得分:2)

根据迭代器的不同,创建副本可能是一项非常耗时的任务(想想一下二进制搜索树的一个天真的,基于堆栈的迭代器)。我想你会意识到这一点,那不是你真正的问题:)。无论如何,据我所知,编译器不需要优化i ++到++ i。

由于不需要优化它,我认为最好在谨慎方面犯错并坚持使用++ i。