1、缓式评估其实就是拖延战术,直到逼不得已的时候才去计算。缓式评估的使用场景有:

2、引用计数,考虑String,String是一个内含char指针(char指针以'\0'结束)的资源管理类,正常情况下,String的copy构造和copy赋值都是深层copy,也就是对char指针指向的内容做一个副本,这个效率显然很低。考虑String s2 = s1; 后面的代码可能只是读取s2,没有必要做深层copy,s2与s1可以共享一份数据,也就是使用引用计数,来实现String。但是,当修改String的时候,必须做一个深层copy,也就是拖延战术。

3、区分读与写,考虑cout<<s2[1]与s2[1] = 'a';为什么区分读和写?读取代价很小,写需要新建一个副本,因此需要区分。问题来了,如何区分呢?对String的数据char做一层封装,即CharProxy。对CharProxy的copy赋值就是写操作,增加隐式类型转换操作符operator char() const,就是读取操作。

4、缓式取出,考虑大型对象,内含很多个字段,为了保持一致性,这个大型对象存储在数据库。考虑需求,根据Id取出Name,如果把整个大型对象都读取出来,效率很差,因为有很多不使用的字段。更好的办法是,按需读取,需要什么取出什么。

5、表达式缓式评估,考虑两个大型矩阵相乘,运算量很大,但是我们往往只想要结果中的一个元素。因此,更好的解决办法是,相乘后不去运算,而是返回一个假的结果(代理结果)。读取结果中的一个元素时,也不去整个计算,而是只计算结果中的这一个元素。

6、缓式评估解决的问题是:避免不必要的计算。如果计算绝对需要,不能使用缓式评估。

转载于:https://www.cnblogs.com/nzbbody/p/3623752.html

【M17】考虑使用缓式评估相关推荐

  1. C++用数组和链表分别实现Stack

    C++用数组和链表分别实现Stack C++学习有段时间了,感觉还是有很多不足啊,今天自己用数组和链表分别实现Stack,当然STL中的Stack肯定不是这么简单,你不妨看一下,说不定有收获呢,若发现 ...

  2. 《More Effective C++》读书笔记

    一.基础议题(Basics) 1.仔细区别 pointers 和 references 当一定会指向某个对象,且不会改变指向时,就应该选择 references,其它任何时候,应该选择 pointer ...

  3. 一文总结More Effective c++

    仔细区别 pointers 和 references(当你知道你需要指向某个东西,而且绝不会改变指向其他东西,或是当你实现一个操作符而其语法需求无法由 pointers 达成,你就应该选择 refer ...

  4. 侯捷推荐的C++书单

    ●书籍是永远的良师益友 过去十年中,有一件事最是奇特有趣:我於 1993 开始<无责任书评>专栏,介绍我所能够掌握的技术范围内的一些世界名着.这样的题材与文体,吸引了很多目光,也开创了某种 ...

  5. More Effective C++读书笔记

    0 导读 鼓励在至少两种编译器平台上发展代码(有哪些编译器??) 1 基础议题 条款1:仔细区别pointers和references 如果这个变量总是必须代表一个对象,也就是说如果你的设计并不允许这 ...

  6. 2019秋招备战复习篇

    @TOC## ? 目录 ➕ C/C++ ⭐️ Effective ? STL 〽️ 数据结构 ⚡️ 算法 ❓ Problems ? 操作系统 ☁️ 计算机网络 ? 网络编程 ? 数据库 ? 设计模式 ...

  7. 《More Effective C++:35个改善编程与设计的有效方法》(中文版)

    <More Effective C++:35个改善编程与设计的有效方法>(中文版)china-pub计算机新书推荐 基本信息原书名: More Effective C++: 35 New ...

  8. Effective C++ More Effective C++(四)

    Effective C++ 视 C++ 为一个语言联邦(C.Object-Oriented C++.Template C++.STL) 宁可以编译器替换预处理器(尽量以 const.enum.inli ...

  9. 【C++/OOP】(侯捷著)

    侯捷观点(系列书评 1/2) [C++/OOP 大系] <程序员>2001.01 作者简介:侯捷,台湾电脑技术作家,着译评兼擅.常着文章自娱,颇示己志. 个人网站:http://www.j ...

最新文章

  1. 074_JSON.stringify()
  2. hibernate一对一外键单向关联
  3. JSP自定义标签开发入门
  4. 读取无线手柄数据_《宇宙机器人》×PS5手柄使用体验:登月级进化
  5. Java高级篇 -- List选择及优化
  6. Windows如何开启虚拟化,以安装虚拟机?
  7. 【Java】基于Socket的C/S聊天程序
  8. 删除计算机共享信息命令,win10系统使用命令将网络共享删除的操作办法
  9. 打造高效前端工作环境 - tmux
  10. webgl渲染Yuv420P图像
  11. IT技术图书之《敏捷无敌》当小说看 你信吗?
  12. 2022年第十三届蓝桥杯题解(全)
  13. mysql备份管家婆_管家婆软件恢复账套数据图解-通过备份文件
  14. DOSBOX常用快捷键DEBUG指令
  15. Windows自带的远程协助工具(非远程桌面,类比QQ远程桌面)
  16. pig的基本语法以及高级语法
  17. Mybatis执行插入语句后并返回主键ID
  18. 软件测试学习 之 进阶之路
  19. 关于游戏开发,如何开发一款游戏(基于unity)
  20. 【密码学基础】07 分组加密工作模式

热门文章

  1. struts2找不到action_第一次用上Struts2框架做Web开发的体验……
  2. 通过例子学Solidity[注释翻译]
  3. Codeforces 988E. Divisibility by 25
  4. 每天一道LeetCode-----寻找给定字符串中重复出现的子串
  5. java nextline没有停住_java中使用nextLine(); 没有输入就自动跳过的问题?
  6. 将 app 打包成 deb 发布安装
  7. 16位汇编 使用word ptr和byte ptr的寻址方式
  8. 如何删除wordpress侧边栏功能的wordpress.org链接
  9. Win7运行QQ2010提示“应用程序无法启动”,因为应用程序的并行配置不正确
  10. 正则表达式matches_正则表达式在VBA中间是如何应用?正则表达式的实现方式?...