Depth exploration of the C + + Object Model - Softcover

??? B ??? Stanley B Lippman

 
9787121149528: Depth exploration of the C + + Object Model

Synopsis

作者Lippman参与设计了全世界套C++编译程序cfront,这本书就是一位伟大的C++编译程序设计者向你阐述他如何处理各种explicit(明确出现于C++程序代码中)和implicit(隐藏于程序代码背后)的C++语意。《深度探索C++对象模型》专注于C++面向对象程序设计的底层机制,包括结构式语意、临时性对象的生成、封装、继承,以及虚拟——虚拟函数和虚拟继承。这《深度探索C++对象模型》让你知道:一旦你能够了解底层实现模型,你的程序代码将获得多么大的效率。Lippman澄清了那些关于C++额外负荷与复杂度的各种错误信息和迷思,但也指出其中某些成本和利益交换确实存在。他阐述了各式各样的实现模型,指出它们的进化之道及其本质因素。书中涵盖了C++对象模型的语意暗示,并指出这个模型是如何影响你的程序的。如果你是一位C++程序员,渴望对于底层知识获得一个完整的了解,那么本书正适合你。MemberFunction的实例化行为(MemberFunctionInstantiation)对于template的支持,最困难的莫过于templatefunction的实例化(instantiation)。目前的编译器提供了两个策略:一个是编译时期策略,程序代码必须在programtextfile中备妥可用;另一个是链接时期策略,有一些meta.compilation工具可以导引编译器的实例化行为(instantiation)。下面是编译器设计者必须回答的三个主要问题:1.编译器如何找出函数的定义?答案之一是包含templateprogramtextfile,就好像它是一个header文件一样。Borland编译器就遵循这个策略。另一种方法是要求一个文件命名规则,例如,我们可以要求,在Point.h文件中发现的函数声明,其templateprogramtext一定要放置于文件Point.C或Point.cpp中,依此类推。cfront就遵循这个策略。EdisonDesignGroup编译器对这两种策略都支持。2.编译器如何能够只实例化程序中用到的memberfunctions?解决办法之一就是,根本忽略这项要求,把一个已经实例化的class的所有memberfunctions都产生出来。Borland就是这么做的——虽然它也提供#pragmas让你压制(或实例化)特定实例。另一种策略就是模拟链接操作,检测看看哪一个函数真正需要,然后只为它(们)产生实例。cfront就是这么做的。EdisonDesignGroup编译器对这两种策略都支持。3.编译器如何阻止memberdefinitions在多个.o文件中都被实例化呢?解决办法之一就是产生多个实例,然后从链接器中提供支持,只留下其中一个实例,其余都忽略。另一个办法就是由使用者来导引“模拟链接阶段”的实例化策略,决定哪些实例(instances)才是所需求的。目前,不论是编译时期还是链接时期的实例化(instantiation)策略,均存在以下弱点:当template实例被产生出来时,有时候会大量增加编译时间。很显然,这将是templatefunctions第一次实例化时的必要条件。然而

"synopsis" may belong to another edition of this title.