11.4 实用延迟值

11.4 实用延迟值

如果我们有一系列计算,可能要花很长时间,并且只在需要时才计算这个(些)值,这时,延迟值就很有用了。在这种情况下,可以得益于缓存,我们在上一节已经用 C# 实现过,把延迟值作为缓存,在需要时才填充。

延迟值的另一个重要用途,是表达一些概念时,很难以其他方式编程。我们将先Haskell 提供的几个例子,讨论有关延迟值的实际使用;Haskell 在每一处都使用延迟计算,这使它成为非常具有表现力的语言。

时间: 2024-08-11 02:59:53

11.4 实用延迟值的相关文章

11.3.5 为 C# 实现延迟值

11.3.5 为 C# 实现延迟值 在 11.3.3 节,我们使用函数来表示 C# 中的延迟计算.我们刚才在 F# 中探讨了Lazy<T> 类型,它为计算过的值,添加了缓存功能.从Visual Studio 2010 开始,在核心的 .NET 库下的System.Lazy <T> 就有了这种类型,因此,我们不必自己实现. 清单 11.18 是简化的 Lazy<T> 类.代码在许多方面做了简化,它不是线程安全的,不处理任何异常,只表达了核心概念. [ 清单的序号终于正常了

11.4.2.1 使用延迟值进行缓存

11.4.2.1 使用延迟值进行缓存 应用程序中最重要的部分是,应用程序启动时执行的代码,找到指定目录中的所有文件,并创建有关每个文件信息的数组:这些信息包含文件名,和为了展示调整大小而计算的延迟值.清单 11.21 是为此而创建的数据结构. 清单 11.21 创建有关图片信息的集合 (F#) open System.IO open System.Drawing type ImageInfo = { Name : string; Preview :Lazy<Bitmap> }   [1] le

C++11标准之右值引用(rvalue reference)

1.右值引用引入的背景 临时对象的产生和拷贝所带来的效率折损,一直是C++所为人诟病的问题.但是C++标准允许编译器对于临时对象的产生具有完全的自由度,从而发展出了Copy Elision.RVO(包括NRVO)等编译器优化技术,它们可以防止某些情况下临时对象产生和拷贝.下面简单地介绍一下Copy Elision.RVO,对此不感兴趣的可以直接跳过: (1) Copy Elision Copy Elision技术是为了防止某些不必要的临时对象产生和拷贝,例如: struct A { A(int)

C++ 11 中的右值引用

C++ 11 中的右值引用 右值引用的功能 首先,我并不介绍什么是右值引用,而是以一个例子里来介绍一下右值引用的功能: #include <iostream>    #include <vector>    using namespace std; class obj    {    public :        obj() { cout << ">> create obj " << endl; }        obj(c

[转载] C++11中的右值引用

C++11中的右值引用 May 18, 2015 移动构造函数 C++98中的左值和右值 C++11右值引用和移动语义 强制移动语义std::move() 右值引用和右值的关系 完美转发 引用折叠推导规则 特殊模板参数推导规则 解决完美转发问题 引用 在C++98中有左值和右值的概念,不过这两个概念对于很多程序员并不关心,因为不知道这两个概念照样可以写出好程序.在C++11中对右值的概念进行了增强,我个人理解这部分内容是C++11引入的特性中最难以理解的了.该特性的引入至少可以解决C++98中的

C++11中的右值引用

原文出处:http://kuring.me/post/cpp11_right_reference May 18, 2015 移动构造函数 C++98中的左值和右值 C++11右值引用和移动语义 强制移动语义std::move() 右值引用和右值的关系 完美转发 引用折叠推导规则 特殊模板参数推导规则 解决完美转发问题 引用 在C++98中有左值和右值的概念,不过这两个概念对于很多程序员并不关心,因为不知道这两个概念照样可以写出好程序.在C++11中对右值的概念进行了增强,我个人理解这部分内容是C

C++ 11中的左值引用和右值引用

1.首先区分左值和右值    左值是表达式结束后依然存在的持久对象    右值是表达式结束时就不再存在的临时对象    便捷方法:对表达式取地址,如果能,则为左值,否则为右值举例:    int a = 10    int b = 20    int *pFlag = &a    vector<int> vctTemp    vctTemp.push_back(1)    string str1 = "hello"    string str2 = "wo

推荐11个实用Python库

1.delorea 非常酷的日期/时间库 from delorean import Delorean EST = "US/Eastern"d = Delorean(timezone=EST) 2.prettytable 可以在浏览器或终端构建很不错的输出 from prettytable import PrettyTable table = PrettyTable(["animal", "ferocity"]) table.add_row([&q

C++11特性之右值引用

title: 右值引用与移动语义 date: 2019-2-24 15:06:34 tags: 学习 categories: 日常 --- 什么是右值?在C++中,一种被广泛认可的说法是,不能取地址,没有名字的就是右值,通常位于等号右边,相反,位于等号左边的,能取地址,有名字的被称为左值. a = b + c 例如上式中,a就是个左值,b+c则是右值. C++11又将右值分为纯右值和将亡值.纯右值包括:不跟对象关联的字面值,一些运算表达式(如1+3).将亡值是跟右值引用相关的表达式,比如右值引用