在循环语句中,for(i=0;i

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语句中挖掘速度无异于从牙缝里找吃的希望吃的更饱些。

1a35d7494dd69e955a42e8b4039ed370_s.jpg Intopass Java Developer Learning C++

11 人赞同

一:i++ 和 ++i
从Java的角度来说,这两个没有区别。(证据,生成的字节码一样。)
从C/C++的角度来说,++i可能更好一些,因为不用存储一个中间变量。(但我怀疑这个是可以被编译器优化掉的。)
二:运算顺序
讨论一个语句中如,i = i++ + i++。究竟++操作是何时发生的,对于C/C++语言可能没有意义,因为是未定义行为,对于Java来说是有意义,因为Java明确定义了运算顺序。

文章知识点与官方知识档案匹配,可进一步学习相关知识C技能树语句与控制流循环语句114090 人正在系统学习中 相关资源:哄女孩子开心的小软件-其它其他资源-CSDN文库

声明:本站部分文章及图片源自用户投稿,如本站任何资料有侵权请您尽早请联系jinwei@zod.com.cn进行处理,非常感谢!

上一篇 2016年10月2日
下一篇 2016年10月2日

相关推荐