2012-03-29 63 views
1

可能重复:
Is there a performance difference between i++ and ++i in C++?优化代码:++ p比p ++更快吗?

C++,我看到人们在for环或其他地方,要增加值经常使用++p,而不是使用返回值。我听说这样更有效率,因为p++在之前返回值,因此需要临时空间。

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

我试图拿出一个很好的例子,使用某种迭代,iter++将实际创建副本(即使不使用的iter++返回值。

毕竟,我们不“吨真的经常考虑寄存器分配或者当我们写代码迭代器。

我学会了用p++只是因为这是我从学到的书本一样。是宁愿++p时没有返回值,使用了过时的做法,或者干脆部分优雅的编码?为什么语言不叫++C呢?

+0

取决于'p'是什么。它是一个“迭代器”吗? 'int'?通常情况下,编译器会优化这些东西。 – Marlon 2012-03-29 21:18:50

+1

嗯,解析一个1000000字符的字符串,并删除所有非alpha字符需要0.0150秒在我的电脑上。 ++ p和p ++的区别真的很重要吗? – BlackBear 2012-03-29 21:20:15

回答

5

p++只有在++p没有完成这项工作 - 即您实际使用返回值时才会变慢。否则,编译器会将代码优化为相同的东西。

人们更喜欢使用++i代替i++,因为它描述了更好的你打算怎么做:增量i,超过递增i,并返回旧值。当然,你倾向于坚持旧习惯。如果您习惯于编写i++,那没关系,除非您使用公司的编码标准使用++i

d &电子商务第3章:``我选C++,因为它很短,有很好的 解释,并且是形式的 “形容词C.””在C不,++就可以了, 视在上下文中,可以理解为“下一个”,“继任者”或“增量”,尽管它总是发音为“加上加号”。名字C++及其 亚军++ C是笑话和双关语的肥沃来源 - 几乎所有的 ,这些名字在选择名称之前就已知晓和赞赏。名称 C++由Rick Mascitti提议。它被编辑到[Stroustrup,1984]和 [Stroustrup,1984c]的最终版本中,于1983年12月首次用于 。

TC++ PL的第1章:``的名称C++(发音 “看见加加”)是由瑞克Mascitti在1983年 名称表示的选自C的变化演变性质夏季杜撰; “++” 是C增量运算符。稍短的名称“C +”是 语法错误;它也被用作不相关的 语言的名称。 C语义鉴赏家发现C++低于++ C。 语言不称为D,因为它是C的扩展,并且 不尝试通过删除功能来解决问题。对于还没有名字的C++的另一 解释,参见[奥威尔,1949]的附录。“”

Sauce.

2

根据迭代器,创建副本可以是一个耗时的任务极其时间(考虑关于二进制搜索树的基于堆栈的迭代器)。我想你应该认识到,但这不是你真正的问题:)。无论如何,就我所知,编译器不需要优化i ++到++ i。因为不需要对它进行优化,所以我认为最好谨慎一点,并坚持使用++ i。