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. 不要用JWT替代session管理(上):全面了解Token,JWT,OAuth,SAML,SSO
  2. java 的23种设计模式 单例模式
  3. Python 参数传入sys.argv和getopt.getopt()的用法
  4. ApacheCN JavaWeb 译文集 20211017 更新
  5. Linux 配置网络
  6. 独立事件、笛卡尔积与矩阵向量乘法
  7. 【2016年第1期】关于我国农业大数据中心建设的设想
  8. 时间管理表 - 《周计划表》
  9. Vue+ElementUI后台管理系统模板推荐
  10. 《御制皇陵碑》(明)朱元璋 撰
  11. 自然语言处理-聊天机器人
  12. NUC8 i5beh 黑苹果macOS Monterey 12.3.1安装教程
  13. prometheus-community-PushProx介绍
  14. NGUI:HUD Text
  15. 让你的查询支持中文拼音码模糊查询。
  16. npm -g, npm -s, npm -d 的区别
  17. ubuntu下80端口无权限问题
  18. 从几何角度切入最近邻
  19. matlab画余割,MATLAB程序作业
  20. JS实现可拖拽div

热门文章

  1. 安卓蓝牙键盘按键映射_多设备无缝切换 雷柏XK100无线蓝牙轻薄键盘评测
  2. Spark(5)——standalone模式
  3. 找到所有数组中消失的数字—leetcode448
  4. java input属性_如何在h:inputText中指定命令属性?
  5. redis 延时任务 看一篇成高手系列 二
  6. html5_0_文章_分级_分段
  7. [BUUCTF-pwn]——[极客大挑战 2019]Not Bad(ORW)(内涵peak小知识)
  8. ajax接口调节,前端用ajax调接口怎么破啊?
  9. Git-rebase 小筆記
  10. UML 中关系详解以及在visio中的表示