国内最专业的IT技术学习网

UI设计

当前位置:主页 > UI设计 >

为什么说++i的效率比i++高?

发布时间:2019/09/11标签:   对象    点击量:

原标题:为什么说++i的效率比i++高?
不晓得你能否据说过++i比i++快的说法,真的如斯吗?++i与i++的差别这两个表白式从咱们初学编程言语的时间就会打仗到。前者是自增后取值,后者是取值后自增。咱们看一个简略的例子。#include<iostream>usingnamespacestd;intmain(){inta=0;intb=0;intc=a++;//inttmp=a;c=a;aa=a+1intd=++b;//bb=b+1;d=b;cout<<"c="<<c<<";d="<<d<<endl;return0;}运转成果:c=0;d=1关于这个成果咱们并不觉得不测。别的咱们还留神到别的一个故意思的景象:#include<iostream>usingnamespacestd;intmain(){inta=0;intb=0;int*c=&(a++);int*d=&(++b);return0;}编译后报错:main.cpp:7:19:error:lvaluerequiredasunary‘&’operandint*c=&(a++);说&感化于左值,也就是说a++的成果并非左值。但++b的成果是左值。可简略懂得左值和右值: 左值,著名工具,可赋值 右值,常设工具,弗成被赋值运算符重载经过后面的例子也发觉了,关于内置范例,前置自增前往工具的援用,然后置自增前往工具的原值(但非左值)。基于上述准则,一个前置版本和后置版本的罕见完成以下:classTest{public:Test&operator++();//前置自增constTestoperator++(int);//后置自增private:intcurPos;//以后地位};/*前置自增完成范式*/Test&Test::operator++(){++curPos;//自增return*this;//取值}/*后置自增完成范式,为了与前置辨别开,多了一个int参数,但素来没用过*/constTestTest::operator++(int){Testtmp=*this;//取值++curPos;//自增returntmp;}认真观看后,咱们发觉前置自增,先自增,后前往原工具的工具;没有发生任何常设工具;然后置自增,先保留原工具,而后自增,最初前往该原常设工具,那末它就须要创立和烧毁,如许一来,效力孰高孰高攀很清晰了。在不停止赋值的情形下,内置范例前置和后置自增的汇编都是一样的呢!voidtest(){inti=0;i++;//++i;}汇编:pushrbpmovrbp,rspmovDWORDPTR[rbp-4],0addDWORDPTR[rbp-4],1noppoprbpret不外,赋值的情形下,而且不开启编译器优化,它们的汇编代码仍是有差异的,有兴致的能够尝尝。总结关于内置范例,前置和后置自增或许自减在编译器优化的情形下,二者并无多大差异,而关于自界说范例,如无特殊须要,人们仿佛愈加偏幸前置自增或自减,由于后置自增经常会发生常设工具。然而,又能进步几多效力呢?【义务编纂:赵宁宁 TEL:(010)68476606】 点赞 0

版权信息Copyright © 银河官网 版权所有    ICP备案编号:鲁ICP备09013610号