2019独角兽企业重金招聘Python工程师标准>>>
1 人赞同
加一段timer不就知道了么,我只记得老师说不管是++i还是i++都比i=i+1快,i++在n十分大的时候慢于++i,原理早忘了(或许应该查看下汇编)
发布于 2015-05-13 1 条评论 感谢
1 人赞同
测试一下
发布于 2015-05-11 添加评论 感谢
2 人赞同
本来,这样的问题我不会回答,心里说“编译器君掩面不语”后跳到下一个问题。
但是冲着你的第一句话:“(这个问题估计1万个程序员也不到1个能真正领悟)”。我忍不住进来跟你说,同学,你一定要成为一个万里挑一的程序员啊。
2 人赞同
按C来说
i++把i增加1,返回i增加前的值
至于是先计算整个表达式还是先增加i应该是未定义的
++i先把i加1,返回i的引用
在for里i++和++i由于返回值没有被使用,因此会被优化成一样的结果
发布于 2015-05-11 1 条评论 感谢
有些人就是不肯平心静气地和人说话,是吧
1 人赞同
for循环中不好说明,不妨假设有这样一个表达式:
int i = 3;
int k;
k = ++i; //#1
k = i++; //#2
前置递增运算符:对象递增加一再使用
即:
/* #1等价于 */
i = i+1; //i的值为4
k = i; //k 的值为4
后置递增运算符:创建一个临时对象,将临时对象替换调用原变量的位置,原变量+1
即:
/* #2等价于 */
k = int(i); //int(i) 是一个临时对象,值为4
i = i+1; //i 的值为5
也就是说后置递增相比前置递增会创建一个临时对象int(i),使用临时对象赋值给k,所以后置递增会比前置递增慢那么一丢丢。
发布于 2015-05-11 添加评论 感谢
39 人赞同
如果 i 是系统类型,两者没有性能区别。绝大多数编译器可以生成同效率代码。由于所谓的多余复制的变量并没有被用到(i++的返回值无人使用),所以编译器优化之后跟++i等价。
两者性能区别理论上存在于当 i 是一个自定义的类,并且这个类重载了++操作符,并且这个类重载「后增量」操作符时使用了值复制作为返回值的情况,在这种情况下,有时编译器能优化掉多余的复制,有时不能。所以++对于自定义对象类型来说会有题主所说的情况。
7 人赞同
在循环语句中,for(i=0;i
没。
我同学有简单地告诉我,i++的话要先copy出一个i然后赋值,用原来的i继续其他运算,最后再把copy出来的i做个increment,然后返还给原来的i。
而++i直接在原来的i上做increment。
无依据的臆测。
比如语法上a = i++; 是等 右边的变量赋值给左边的变量,但是赋值应发生在所有运算之后。
错。
====================================
做点正事,不要问没有意义的问题。
现代程序设计不怎么追求速度,通常认为代码可读性优先于程序效率。
即使要求效率也是从算法和数据结构入手,
从for语句中挖掘速度无异于从牙缝里找吃的希望吃的更饱些。

11 人赞同
一:i++ 和 ++i
从Java的角度来说,这两个没有区别。(证据,生成的字节码一样。)
从C/C++的角度来说,++i可能更好一些,因为不用存储一个中间变量。(但我怀疑这个是可以被编译器优化掉的。)
二:运算顺序
讨论一个语句中如,i = i++ + i++。究竟++操作是何时发生的,对于C/C++语言可能没有意义,因为是未定义行为,对于Java来说是有意义,因为Java明确定义了运算顺序。
文章知识点与官方知识档案匹配,可进一步学习相关知识C技能树语句与控制流循环语句114090 人正在系统学习中 相关资源:哄女孩子开心的小软件-其它其他资源-CSDN文库
声明:本站部分文章及图片源自用户投稿,如本站任何资料有侵权请您尽早请联系jinwei@zod.com.cn进行处理,非常感谢!