6.1
尽可能多的数据profile你的软件。此外,你必须确保每组数据在客户(或至少是最重要的客户)如何使用软件的方面能有代表性。
6.2
因为需要存储两个值之间的依赖关系,维护存储值、依赖关系或上述两者,重载操作符例如赋值符、拷贝操作和加法操作,所以lazy evaluation在数字领域应用得很多。另一方面运行程序时它经常节省大量的时间和空间。
避免不需要的对象拷贝,通过使用operator[]区分出读操作,避免不需要的数据库读取操作,避免不需要的数字操作。但是它并不总是有用。就好象如果你的父母总是来检查你的房间,那么拖延整理房间将不会减少你的工作量。实际上,如果你的计算都是重要的,lazy evaluation可能会减慢速度并增加内存的使用,因为除了进行所有的计算以外,你还必须维护数据结构让lazy evaluation尽可能地在第一时间运行。在某些情况下要求软件进行原来可以避免的计算,这时lazy evaluation才是有用的。
6.3
over-eager evaluation(过度热情计算法):在要求你做某些事情以前就完成它们
如果你认为一个计算需要频繁进行,你就可以设计一个数据结构高效地处理这些计算需求,这样可以降低每次计算需求时的开销
采用over-eager最简单的方法就是caching(缓存)那些已经被计算出来而以后还有可能需要的值。
template<class T>
T&DynArray<T>::operator[](int index)
{
if (index < 0) {
throw an exception; // 负数索引仍不合法
}
if (index >当前最大的索引值) {
调用new分配足够的额外内存,以使得
索引合法;
}
返回index位置上的数组元素;
}
6.4
仅仅需要一小段时间的变量称为临时变量
C++语言禁止为非常量引用(reference-to-non-const)产生临时对象
void uppercasify(const string& str);
在任何时候只要见到常量引用(reference-to-const)参数,就存在建立临时对象而绑定在参数上的可能性。在任何时候只要见到函数返回对象,就会有一个临时对象被建立(以后被释放)。