引言

++i 和 i++ 在多数情况下产生的结果都一样,但是它们的效率如何呢?
在C++中,它俩都用了运算符++的重载,这里执行效率上就有了些区别;

先说结论

++i 的效率比 i++ 的高,尤其在处理大量自定义类型的数据时会更明显;
——————————————————————————————————————————————————————

分析

++i 的实现简单说就是加1后返回结果就行了;
++的重载代码:

class Text;
Text &Text::operator++()
{   *this = *this + 1;   return *this;
}

i++ 多出来一步,因为它是先使用当前值后加1,所以需要一个临时的变量来存储原来的值;
++的重载代码:

class Text;
const Text Text::operator ++(int)
{   Text pre = *this;   *this = *this + 1;   return pre;
}

通过代码可以很轻易看出来i++多了一步,定义了一个新的变量存放原来的值;

总结

在实际编程中,
对于内置数据类型(如int,char,指针等),编译器会有优化,所以 ++i 和 i++没有太大区别;
而对于自定义的数据类型,就会有很大差别,C++中最典型的就是在STL中有关迭代器 iterator 的操作都是 ++i 的;

所以只要没有强制的要求,就使用 ++i,反正效率提一点算一点,就用最好的;

++i 和 i++ 效率分析(C++)相关推荐

  1. 编程方法学23:搜索排序与算法效率分析

    前言 本笔记是斯坦福公开课,编程方法学的学习笔记. 总体而言,这门课讲了很多很基础的东西,具有很强的通用性. 正文 本次的笔记对应的是第二十三节课,这堂课是助教来讲搜索排序与算法效率分析的知识. 1线 ...

  2. 声笔双拼单字效率分析

    -----------------------声笔双拼单字效率分析--------------------------  2   keys: 21        items, 99131909.00  ...

  3. 声笔码和声笔数码单字效率分析

    -----------------------声笔数字码单字效率分析--------------------------  2   keys: 21        items, 99116052.00 ...

  4. Oracle 分页查询方法和效率分析

    1.Oracle 12c fetch抓取记录 查询前10行记录 # fetch first 10 rows only 查询6至10行记录 # offset 5 rows fetch next 5 ro ...

  5. 声笔飞码和飞码数码单字输入效率分析

    -----------------------声笔飞数单字效率分析--------------------------  2   keys: 21        items, 99116052.00  ...

  6. huffman编解码算法实验与压缩效率分析

    一.基本原理 1.huffman编码原理 huffman编码是一种无失真编码方式,是可变长(VLC)编码的一种. huffman编码基于信源的概率统计模型,基本思路是出现概率大的信源符号编长码,出现概 ...

  7. 12代酷睿CPU效率分析(一)多核互联延迟篇

    12代酷睿CPU效率分析(一)多核互联延迟篇 10年前买的酷睿2代笔记本坏了,为了搞元宇宙,终于还是换了牙膏厂的12代酷睿游戏本,但12代酷睿大小核,一直比较怀疑,尤其是多核元宇宙游戏引擎优化问题,所 ...

  8. 排队器拦截_基于排队论的多层拦截巡航导弹效率分析

    基于排队论的多层拦截巡航导弹效率分析 郭建亮 ; 高歆 ; 申卯兴 [期刊名称] <空军工程大学学报(自然科学版) > [年 ( 卷 ), 期] 2009(010)005 [摘要] 用排队 ...

  9. JDK8 Stream 数据流效率分析

    JDK8 Stream 数据流效率分析 Stream 是Java SE 8类库中新增的关键抽象,它被定义于 java.util.stream (这个包里有若干流类型: Stream<T> ...

  10. 非递归算法和递归算法的效率分析

    在对算法进行效率分析时,非递归算法和递归算法的分析表现出差异性.这里将分类逐一介绍. 非递归算法效率分析 在分析非递归算法时,我们可遵循以下通用方案: (1) 决定用哪个(哪些)参数表示输入规模. ( ...

最新文章

  1. js ajax 递归,javascript ajax循环请求/ 长轮询终极解决办法——递归
  2. Apache服务器部署(2)
  3. linux命令作为子进程标记,Linux基础命令---显示进程ps
  4. list.add时报错:Exception in thread “main“ java.lang.UnsupportedOperationException
  5. 波卡链Substrate (7)Grandpa协议一“概念说明”
  6. css点滴知识汇集(转+编辑)
  7. 【智简联接,万物互联】华为云·云享专家董昕:Serverless和微服务下, IoT的变革蓄势待发
  8. maven搭建mybatis测试
  9. 前端原生Html免费模板网站总结(带网址)
  10. MVC+easyui-datagrid之查看详情
  11. dx11学习笔记-3.三维空间变换(自己整理,基础详尽)
  12. 第二版 手把手教你如何建立自己的Linux系统
  13. 如何辨别u盘是否为缩水,并恢复u盘真实容量
  14. [转]斗鱼大数据搭建的经验和坑
  15. MAC苹果电脑关闭系统完整性保护SIP(System Integrity Protection)
  16. 在docker容器中操作es,并给es7.6添加用户鉴权设置密码
  17. deli考勤机3960操作手册
  18. redis数据类型总结
  19. 多账户交易PAMM / MAM
  20. 刚安装完成的Jmeter5打开之后没有工作台

热门文章

  1. 为什么c语言写程序要挂起,我运行的C语言程序挂起了,应该怎么办?
  2. 邀请参加活动的邀请函_圣诞节点灯仪式活动邀请函制作
  3. ubyntu 链接mysql_ubuntu mysql 的安装、配置、简单使用,navicat 连接
  4. php drive mssql,PHP 连接 MSSQL 2005/2008 以UTF8存取 并让ADODB支持的安装设置
  5. 成功解决ImportError: cannot import name 'PILLOW_VERSION'
  6. Tool/IDE之MinGW:MinGW(C++环境)的简介、安装、使用方法之详细攻略
  7. ML之SR:Softmax回归(Softmax Regression)的简介、使用方法、案例应用之详细攻略
  8. 《疯狂JAVA讲义》笔记1
  9. PAT_B_1006 换个格式输出整数
  10. Git 提交 .gitignore文件