i++ 与 ++i 的效率哪个更高?

guirenwang 2008-07-23 12:12:17
今天我同学说 ++i 比 i++ 的效率更加高一些,因为他在某个地方看到严蔚敏老师是这么说的。我想问下csdn的大牛们,这是真的吗,能不能给一下解释了,小弟先在此谢过了。
...全文
2798 64 打赏 收藏 转发到动态 举报
写回复
用AI写文章
64 条回复
切换为时间正序
请发表友善的回复…
发表回复
散自在 2012-08-03
  • 打赏
  • 举报
回复
++$i 效率高于 $i++
melody_ye 2011-11-06
  • 打赏
  • 举报
回复
学习了.
达能猫 2010-09-08
  • 打赏
  • 举报
回复
用objdump看一下就知道了,没区别的,STL我没试过
liuchang5772 2008-07-26
  • 打赏
  • 举报
回复
飘过,学习一下。我刚知道
yuhaozx 2008-07-25
  • 打赏
  • 举报
回复
考虑是否生成临时变量
考虑编译器的水平,
看看汇编生成的代码
yangfanchina 2008-07-25
  • 打赏
  • 举报
回复
mark一下,好帖,好帖
xuxingok 2008-07-25
  • 打赏
  • 举报
回复
当然是++i了
不过也看编译器,有的会优化i++的!
runtospring 2008-07-25
  • 打赏
  • 举报
回复
++i是在用i之前加1,i++是在用了i后加一,这个也有速度快慢吗?
NKLoveRene 2008-07-25
  • 打赏
  • 举报
回复
++i
JIGSONG 2008-07-25
  • 打赏
  • 举报
回复
验证12楼第一条;
学习12楼。
[Quote=引用 25 楼 guanchunsheng 的回复:]
引用 24 楼 guanchunsheng 的回复:
搭车问一下,VC6里的disassembly窗口里看到的就是编译生成的汇编么?
如下
a++;

Assembly code
0040102F mov eax,dword ptr [ebp-4]
00401032 add eax,1
00401035 mov dword ptr [ebp-4],eax


++a;

Assembly code
00401038 mov ecx,dword ptr [ebp-4]
0040103B add ecx,1
0040103E mov dword ptr [ebp-4],ecx …
[/Quote]
tfnadnt 2008-07-25
  • 打赏
  • 举报
回复
学习
heishanyizu 2008-07-25
  • 打赏
  • 举报
回复
简单的说:
i++(在c++中)在实现的时候,系统会产
生了一个local object class INT;
++i
INT INT::operator++()
{
*this=*this+1;
return *this;
}
i++
const INT INT::operator ++(int)
{
INT oldvalue=*this;
*this=*this+1;
return oldvalue
}

所以从效率上来说++i比i++更效率 但是对于单纯的 ++i 和 i++ 没什么区别 因为前而后置操作符则必须先保存操作数原来的值,以便返回未加1之前的值作为操作的结果。对于int对象和指针,编译器可优化掉这项额外工作
Walker-cheng 2008-07-25
  • 打赏
  • 举报
回复
考虑编译器的水平
1、对于内置数据类型,以现在的编译器的优化水平,前++和后++没区别的,这个可以通过看汇编代码证明

2、对于自定义数据类型,像STL,前++的效率要高于后++,所以STL中关于iterator都是前++的
Andrwyw 2008-07-24
  • 打赏
  • 举报
回复
学习`
lxl843 2008-07-24
  • 打赏
  • 举报
回复
++i
csz_1987 2008-07-24
  • 打赏
  • 举报
回复
学习了。。。
sunyuqian 2008-07-24
  • 打赏
  • 举报
回复
[Quote=引用 7 楼 hemiya 的回复:]
如果是内置类型如int单语句i++和++i没区别;
如果i是自定义的类型重载的后置++和前置++,有区别。
前置比后置效率高.
[/Quote]

学习
guirenwang 2008-07-24
  • 打赏
  • 举报
回复
谢谢各位高手的指点,我给帖子加分,希望大家可以更深入的探讨。
eric_0206 2008-07-23
  • 打赏
  • 举报
回复
请教一下,C编译器的汇编怎么看~?或者说哪里能看到~?
visame 2008-07-23
  • 打赏
  • 举报
回复
同意该说法
++i 不用生成临时变量而 i++要生成临时变量
加载更多回复(43)

69,382

社区成员

发帖
与我相关
我的任务
社区描述
C语言相关问题讨论
社区管理员
  • C语言
  • 花神庙码农
  • 架构师李肯
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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