懂 就说出来

博客园 首页 新随笔 联系 订阅 管理

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)参数,就存在建立临时对象而绑定在参数上的可能性。在任何时候只要见到函数返回对象,就会有一个临时对象被建立(以后被释放)。

posted on 2007-03-14 21:45  景飒风景  阅读(280)  评论(0编辑  收藏  举报