可能重复:
Is there a performance difference between i++ and ++i in C++?
在C++
中,我看到人们经常在++p
循环或其他地方使用for
,您希望在其中增加值,但不使用返回值。我听说这更有效,因为p++
在递增之前返回值,因此需要一个临时空间。
但是,感觉即使是非常无知的编译器也会将返回值作为死代码(只要内联增量代码,因此编译器可以看到返回值不是必需的)。
我试图想出一个很好的例子,使用某种迭代器,iter++
实际上会创建副本(即使没有使用iter++
的返回值。
毕竟,当我们用迭代器编写代码时,我们并不经常考虑寄存器分配。
我学会了使用p++
,因为这就是我从中学到的那本书。当没有使用返回值的古老实践时,或者只是优雅编码的一部分时,更喜欢++p
吗?为什么语言不被称为++C
呢?
答案 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]的附录。''
答案 1 :(得分:2)
根据迭代器的不同,创建副本可能是一项非常耗时的任务(想想一下二进制搜索树的一个天真的,基于堆栈的迭代器)。我想你会意识到这一点,那不是你真正的问题:)。无论如何,据我所知,编译器不需要优化i ++到++ i。
由于不需要优化它,我认为最好在谨慎方面犯错并坚持使用++ i。