读书人

让i递增时i++;和++i;的效率有关问题

发布时间: 2013-02-27 10:48:11 作者: rapoo

让i递增时,i++;和++i;的效率问题
今天突然想起,听到别人说过,++i;比i++;效率更高些,i++要产生一个临时性的副本。
请问各位,是否有这一说?

时间复杂度已经验证,两者没有区别。

#include <time.h>
#include <stdio.h>
#include <Windows.h>
int main()
{
double start,end,cost,i;
i=0;
start=clock();
while(i<10000000)
i++;
end=clock();
cost=end-start;
printf("%f\n",cost);
i=0;
start=clock();
while(i<10000000)
++i;
end=clock();
cost=end-start;
printf("%f\n",cost);
system("pause");
return 0;
}

[解决办法]
Your test won't make any difference for build-in types like int, long, double etc.
It will make difference if you overload pre-increment and post-increment operators.

[解决办法]
当i是一个迭代器对象时,++i比i++效率高点
[解决办法]
内置数据类型 大部分编译器会给你优化
[解决办法]
原始类型没区别,所谓“临时的副本”那是针对类类型的吧。

[解决办法]
算是吧,不过都是基本数据类型,都不算是差异的。你要是非要纠结,那给你一篇博客:http://blog.csdn.net/zlhy_/article/details/8349300
讲的是为什么++i可以作为左值而i++不可以
[解决办法]
一般情况下后置式的会返回一个副本,这就增加了开销了
[解决办法]
理论上是。 但是对于int i这种 忽略不计吧。
[解决办法]
对学习编程者的忠告:
眼过千遍不如手过一遍!
书看千行不如手敲一行!
手敲千行不如单步一行!
单步源代码千行不如单步对应汇编一行!
单步Debug版对应汇编千行不如单步Release版对应汇编一行!

[解决办法]
要单步Release版对应汇编,请在前面临时加一行__asm int 3
[解决办法]
i++要多返回一个临时对象,如果i是一个很大的结构体之类的东西,开销就显现出来了。
[解决办法]
想要测试区别,要关了优化,实际上直接查看汇编代码就知道了

读书人网 >C++

热点推荐