设为首页 加入收藏

TOP

13.6 无用计算
2013-10-07 14:06:24 来源: 作者: 【 】 浏览:57
Tags:13.6 无用 计算

13.6  无用计算

延迟计算是指那些不总是必须执行的计算,至于哪些计算是必须执行的与程序的执行流程有关,而无用计算是指那些根本无须执行的计算。无论执行流程如何,这些计算结果从不使用,因此它们是完全没有意义的。

一个关于无用计算的精妙例子是成员对象的无用初始化。

  1. class Student {  
  2. public:  
  3.     Student(char *nm);  
  4.     ...  
  5. private:  
  6.     string name;  
  7. }; 

Student类构造函数将输入的字符指针转换成一个代表学生姓名的string对象:

  1. Student::Student(char *nm)  
  2. {  
  3.     name = nm;  
  4.     ...  

C++(www.cppentry.com)保证在Student的构造函数体执行之前,所有的成员对象已经创建完成,此处即string型的name对象。既然我们没有显式地告诉编译器如何构造它,编译器就插入了对string默认构造函数的调用。该调用在Student的构造函数体执行之前进行。在构造函数体之后执行以下代码:

  1. name = nm

该赋值操作实际上清除了name对象之前的内容。我们从未使用过编译器调用的string默认构造函数的结果。通过在Student的构造函数初始化列表中显式指明string构造函数,可以避免这种无效计算:

  1. Student::Student(char *nm) : name(nm) //
    string显式构造函数  
  2. {  
  3.     ...  

由于我们明确告诉编译器使用哪个string构造函数,编译器将不再隐式地调用string默认构造函数[Mey97]。因此我们实现了一步完成string成员对象的构造。

】【打印繁体】【投稿】【收藏】 【推荐】【举报】【评论】 【关闭】 【返回顶部
分享到: 
上一篇13.8 内存管理 下一篇13.5 延迟计算

评论

帐  号: 密码: (新用户注册)
验 证 码:
表  情:
内  容: