zoukankan      html  css  js  c++  java
  • 为什么++i比i++更优更快

     

    转载自https://www.omegaxyz.com/2017/05/20/aboutippandppi/

    递增(++)和递减(–-)运算符为对象的加1和减1操作提供了简洁的书写形式。除此之外,这两个运算符还可以用于迭代器,因为很多迭代器本身不支持算术运算,所以此时递增和递减除了简介外还是必需的。

           递增和递减运算符有两种形式:前置形式和后置形式,分别对应++i和i++。运算符的前置形式是将对象加1(或减1),然后将求值后的对象作为结果,而后置形式也是将对象加1(或减1),但是求值结果是对象未作出运算的值的副本。

       int i=0,j;

       j=++i;                    //   i=1,j=1

       j=i++;                   //    i=1 , j=0

    这两种运算必需作用于左值运算对象,前置形式将运算对象本身作为左值返回,后置形式将运算对象的副本作为右值返回。

           在写代码中,如非必需,尽量避免后置形式,因为:前置形式避免了不必要的工作,它把值加1(或减1)后直接返回改变了的运算对象,而后置形式需要将原始值存储下来,以便返回这个未修改的原始值。如果我们不需要未修改的原始值时,那么后置形式的写法就是一种浪费。

          对于正数和指针类型来说,编译器可能对这种额外的工作进行了一定的优化,但是对于相对复杂的迭代器来说,这种额外的工作就消耗巨大了。所以养成前置形式的好习惯,不仅不需要担心性能问题,而且写出的代码也符合编程的初衷。

    天涯犹在,不诉薄凉。
  • 相关阅读:
    P1829 [国家集训队]Crash的数字表格 / JZPTAB 莫比乌斯反演
    Luogu P1447 [NOI2010]能量采集 数论??欧拉
    Luogu P2522 [HAOI2011]Problem b 莫比乌斯反演
    Luogu P2257 YY的GCD 莫比乌斯反演
    [笔记] 数论函数小记
    [笔记] 线性筛小记
    Luogu P1092 虫食算 爆搜
    Luogu P1066 2^k进制数 组合数学
    Luogu P1641 [SCOI2010]生成字符串 组合数学
    Luogu P2532 [AHOI2012]树屋阶梯 卡特兰数
  • 原文地址:https://www.cnblogs.com/Knight02/p/14623719.html
Copyright © 2011-2022 走看看