讨论++i和i++谁的效率高?

oosky2004 2005-10-24 10:05:57
rt
这几天看书在讨论数组边界的时候引出的问题。
推荐用++i,因为它的效率比后者高。
...全文
675 24 打赏 收藏 转发到动态 举报
写回复
用AI写文章
24 条回复
切换为时间正序
请发表友善的回复…
发表回复
逸学堂 2005-10-26
  • 打赏
  • 举报
回复
(VC)对于内置类型,写++变量和变量++
编译器都经过优化,采用++变量的方式。
看看编译后的汇编
13: int i(1);
0040D425 mov dword ptr [ebp-0Ch],1
14: ++i;
0040D42C mov ecx,dword ptr [ebp-0Ch]
0040D42F add ecx,1
0040D432 mov dword ptr [ebp-0Ch],ecx
15: i++;
0040D435 mov edx,dword ptr [ebp-0Ch]
0040D438 add edx,1
0040D43B mov dword ptr [ebp-0Ch],edx
但是对于自定义类对象
如果重载先++,和后++操作符
那么要使用先++,因为这时编译器,不可能对你的类型进行优化!

Maconel 2005-10-26
  • 打赏
  • 举报
回复
++i效率高。
不过现在一般的编译器,vc,c++builder等,都已经优化了,一般情况应该没什么区别。
struggle813 2005-10-26
  • 打赏
  • 举报
回复
++i相当于x = x+1;i++相当于y=(t=x,x=x+1,t)所以++i没有额外的开销.
csucdl 2005-10-26
  • 打赏
  • 举报
回复
哦!!!
goodluckyxl 2005-10-25
  • 打赏
  • 举报
回复
http://community.csdn.net/Expert/FAQ/FAQ_Index.asp?id=205079
提问时看看faq
我的女神 2005-10-25
  • 打赏
  • 举报
回复
++i效率高。
你可以自己模拟一下。

// 前缀可能的实现
int PreAdd( int *i )
{
*i = *i + 1;
return *i;
}

// 后缀可能的实现
int PosAdd( int *i )
{
int tmep = *i;
*i = *i + 1;
return temp;
}
  • 打赏
  • 举报
回复
如果是内置类型( char , short , int , long , long long , float , double 等 ) , 上面的效率木有区别, 如果是用户定义类型则依赖于对 + , += , ++ 等操作符的重载.
foochow 2005-10-25
  • 打赏
  • 举报
回复
一般都会被优化了
three1983 2005-10-25
  • 打赏
  • 举报
回复
不仔细调用一下很难分出来哪个 快 具体情况具体分析
pengcyu 2005-10-25
  • 打赏
  • 举报
回复
i++要调用++i吧
ruodeer 2005-10-25
  • 打赏
  • 举报
回复
++i 在C++中是左值吧,返回的是调用对象的引用
i++在c++中是右值吧!产生临时变量保存i。
我用vs测试一下,++i用的时间少!
csucdl 2005-10-25
  • 打赏
  • 举报
回复
i = i + 1
i += 1
++i
哪个效率高
conglingkaishi 2005-10-25
  • 打赏
  • 举报
回复
++i是左值,是在一个存储单元直接作用,i++会产生临时变量来保存i的值,使用过后再作++运算。如果我没记错的话,呵呵。
Pigwen 2005-10-25
  • 打赏
  • 举报
回复
随便拿一个类来重载这两个运算符就知道了呀。
danscort2000 2005-10-25
  • 打赏
  • 举报
回复
发现了现代版本的茴字有4种写法
codearts 2005-10-25
  • 打赏
  • 举报
回复
对int这种类型来说,应该一样吧

对iterator这些东西,++i应该快
PMsg 2005-10-24
  • 打赏
  • 举报
回复
后者使用了前者
kangtian0 2005-10-24
  • 打赏
  • 举报
回复
++i效率高
chengming1944 2005-10-24
  • 打赏
  • 举报
回复
有什么不同吗?
herman~~ 2005-10-24
  • 打赏
  • 举报
回复
一个先赋值后加,一个先加后赋值
效率应该一般吧?
加载更多回复(4)

64,648

社区成员

发帖
与我相关
我的任务
社区描述
C++ 语言相关问题讨论,技术干货分享,前沿动态等
c++ 技术论坛(原bbs)
社区管理员
  • C++ 语言社区
  • encoderlee
  • paschen
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
  1. 请不要发布与C++技术无关的贴子
  2. 请不要发布与技术无关的招聘、广告的帖子
  3. 请尽可能的描述清楚你的问题,如果涉及到代码请尽可能的格式化一下

试试用AI创作助手写篇文章吧