社区
C语言
帖子详情
i++ 与 ++i 的效率哪个更高?
guirenwang
2008-07-23 12:12:17
今天我同学说 ++i 比 i++ 的效率更加高一些,因为他在某个地方看到严蔚敏老师是这么说的。我想问下csdn的大牛们,这是真的吗,能不能给一下解释了,小弟先在此谢过了。
...全文
2920
64
打赏
收藏
i++ 与 ++i 的效率哪个更高?
今天我同学说 ++i 比 i++ 的效率更加高一些,因为他在某个地方看到严蔚敏老师是这么说的。我想问下csdn的大牛们,这是真的吗,能不能给一下解释了,小弟先在此谢过了。
复制链接
扫一扫
分享
举报
写回复
配置赞助广告
用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)
i
++
和
++
i 哪个
效率
更高
简单比较前缀运算符和后缀自增运算符的
效率
是片面的,因为存在很多因素影响这个问题的答案。首先考虑内建数据类型的情况:如果自增表达式的结果没有被使用,而是仅仅简单地用于增加一元操作数,前缀法和后缀法没有任何区别,编译器的处理都应该是相同的,很难想象得出有什么编译器实现可以别出心裁地在二者之间制造任何差异。 我们看看下面这个程序: #include <stdio.h> int main() { int i = 0; int x = 0; i
++
;
++
i; x = i
++
; x =
++
i 与i
++
哪个
效率
更高
?
解析: 在这里声明,简单的比较前缀自增运算符和后缀自增运算符的
效率
是片面的,因为存在很多因素影响这个问题的答案。首先考虑内建数据类型的情况:如果自增运算表达式的结果没有被使用,而是仅仅简单的用于增加一员操作数,答案是明确的,前缀法和后缀法没有任何区别,编译器的处理都应该是相同的,很难想象得出有什么编译器实现可以别出心裁在二者之间制造任何差异。我们看看下面这个程序: #include...
++
i和i
++
哪个
效率
更高
转载:http://blog.chinaunix.net/uid-21843387-id-105857.html 答案: 在内建数据类型的情况下,
效率
没有区别; 在自定义数据类型的情况下,
++
i
效率
更高
! 分析: (自定义数据类型的情况下)
++
i返回对象的引用; i
++
总是要创建一个临时对象,在退出函数时还要销毁它,而且返回临时对象的值时还会调用其拷贝构造函数。 (...
i
++
与
++
i哪个
效率
更高
?
答案:在内建数据类型的情况下,
效率
没有区别;在自定义数据类型的情况下,
++
i
效率
更高
!分析:(自定义数据类型的情况下)
++
i返回对象的引用;i
++
总是要创建一个临时对象,在退出函数时还要销毁它,而且返回临时对象的值时还会调用其拷贝构造函数。(重载这两个运算符如下)class Integer{public: Integer(long data):m_da
C
++
i
++
和
++
i哪个
效率
更高
先看以下代码 1 #include <stdio.h> 2 3 int main() 4 { 5 int i = 0; 6 int x = 0; 7 8 i
++
; 9
++
i; 10 x = i
++
; 11 x =
++
i; 12 13 return 0; 14 ...
C语言
70,040
社区成员
243,245
社区内容
发帖
与我相关
我的任务
C语言
C语言相关问题讨论
复制链接
扫一扫
分享
社区描述
C语言相关问题讨论
社区管理员
加入社区
获取链接或二维码
近7日
近30日
至今
加载中
查看更多榜单
社区公告
暂无公告
试试用AI创作助手写篇文章吧
+ 用AI写文章