1. 首页
  2. 编程语言
  3. C++ 
  4. 深度探索C++对象模型.pdf

深度探索C++对象模型.pdf

上传者: 2019-04-15 06:11:48上传 PDF文件 10.73MB 热度 15次
内容简介 《深度探索C++对象模型》重点:探索"对象导向程序所支持的C++对象模型"下的程序行为。对于"对象导向性质之基础实现技术"以及"各种性质背后的隐含利益交换"提供一个清楚的认识。检验由程序变形所带来的效率冲击。提供丰富的程序范例、图片,以及对象导向观念和底层对象模型之间的效率测量。Inside The C++ Object Model专注于C++对象导向程序设计的底层机制,包括结构式语意、暂时性对象的生成、封装、继承,以及虚拟——虚拟函数和虚拟继承。这《深度探索C++对象模型》让你知道:一旦你能够了解底层实现模型,你的程序代码将获得多么大的效率。Lippman澄清了那些关于C++额外负荷与复杂 度的各种错误信息和迷思,但也指出其中某些成本和利益交换确实存在。他阐述了各式各样的实现模型,指出它们的进化之道及其本质因素。 编辑推荐 《深度探索C++对象模型》涵盖了C++对象模型的语意暗示,并指出这个模型是如何影响你的程序的。C++成山似海的书籍堆中,这一本不是婴幼儿奶粉,也不是较大婴儿奶粉,它是成人专用的低脂高钙特殊奶粉。 对于C++底层机制感兴趣的读者,这《深度探索C++对象模型》会给你"漫卷诗书喜欲狂"的感觉。 了解C++ Object Model,是学习Component Object Model的最短路线。 如果你是一位C++程序员,渴望对于底层知识获得一个完整的了解,那么Inside The C++ Object Model正适合你。 媒体推荐 前言 差不多有10年之久,我在贝尔实验室(Bell Laboratories)埋首于C++的实现任务。最初的工作是在cfront上面(Bjarne Stroustrup的第一个C++编译器),从1986年的1.1版到1991年9月的3.0版,然后移转到Simplifier(这是我们内部的命名),也就是Found~ion项目中的C++对象模型部分。在Simplifier设计期间,我开始酝酿这本书。 Foundation项目是什么?在Bjarne的领导下,贝尔实验室中的一个小组探索着以C++完成大规模程序设计时的种种问题的解决之道。Foundation项目是我们为了构造大系统而努力定义的一个新的开发模型;我们只使用C++,并不提供多重语言的解决方案。这是个令人兴奋的工作,一方面是因为工作本身,一方面是因为工作伙伴:Bjarne、Andy Koenig、Rob Murray、Martin Carroll、Judy Ward、Steve Buroff、Peter Juhl,以及我自己。Barbara Moo管理我们这一群人(Bjarne和Andy除外)。Barbara Moo常说管理一个软件团队,就像放牧一群骄傲的猫。 我们把Foundation想象成一个核心,在那上面,其它人可以为使用者铺设一层真正的开发环境,把它整修为他们所期望的UNIX或Smalltalk模型。私底下我们把它称为Grail(传说中耶稣最后的晚餐所用的圣杯),人人都想要,但是从来没人找到过! Grail使用一个由Rob Murray发展出来并命名为ALF的面向对象层次结构,提供一个永久的、以语意为基础的表现法。在Grail中,传统编译器被分解为数个各自分离的可执行文件。parser负责建立程序的ALF表现法。其它每一个组件(比如type checking、simplification,code generation)以及工具(比如browser)都在程序的一个ALF表现体上操作(并可能加以扩展)。Simplifier是编译器的一部分,处于typechecking和codegeneration之间。Simplifier这个名称是由Bjarne所倡议的,它原本是cfront的一个阶段(phase)。 在type checking和code generation之间,Simplifier做什么事呢?它用来转换内部的程序表现。有三种转换风味是任何对象模型都需要的: 1.与编译器息息相关的转换(Implementation,dependent transformations) 这是与特定编译器有关的转换。在ALF之下,这意味着我们所谓的“tentative”nodes。例如,当parser看到这个表达式: fct(); 它并不知道是否(a)这是一个函数调用操作,或者(b)这是overloaded call operator在class object fct上的一种应用。默认情况下,这个式子所代表的是一个函数调用,但是当(b)的情况出现时,Simplifier就要重写并调换call subtree。 2.语言语意转换(Language semantics transformations) 这包括constructor/destructor的合成和扩展、memberwise初始化、对于memberwise copy的支持、在程序胫邪膊錭onversion operators、临时性对象,以及对constructor/destructor的调用。 3.程序代码和对象模型的转换(Code and object model transformations) 这包括对virtual functions、virtual base class和inheritance的一般支持、new和delete运算符、class objects所组成的数组、local static class instances、带有非常量表达式(nonconstant expression)之global object的静态初始化操作。我对Simplifier所规划的一个目标是:提供一个对象模型体系,在其中,对象的实现是一个虚拟接口,支持各种对象模型。 最后两种类型的转换构成了本书的基础。这意味着本书是为编译器设计者而写的吗?不是,绝对不是!这本书是由一位编译器设计者针对中高级C++程序员所写的。隐藏在这本书背后的假设是,程序员如果了解C++对象模型,就可以写出比较没有错误倾向而且比较有效率的代码。 作者简介 Stanley Lippman目前是华特迪斯尼主题动画公司(Walt Disney Feature Animation)的主要软件工程师。他曾经在AT&T贝尔实验室领导cfront 3.0和2.1版的编译器开发小组。他也是贝尔实验室中由Bjame Stroustrup所领导的Foundation专案组中的一员,负责对象模型并研究C++程序开发环境。Stan著有极为成功的C++ Primer一书,也发表过许多C++方面的论文。Stan最近刚从C++ Report的编辑位置上“退隐”,他曾在那个位置上做了4年。他的C++论述遍及全球。 侯捷,海峡两岸著名的电脑技术自由作家,对于技术的钻研和发表,有独特的品性与坚持。作品涵盖著、译、评三方面,散见于各种刊特、媒体、网站论坛,深受读者喜爱和尊敬。 目录 本立道生(侯捷 译序) 目录 前言(Stanley B.Lippman) 第0章 导读(译者的话) 第1章 关于对象(Object Lessons) 加上封装后的布局成本(Layout Costs for Adding Encapsulation) 1.1 C++模式模式(The C++ Object Model) 简单对象模型(A Simple Object Model) 表格驱动对象模型(A Table-driven Object Model) C++对象模型(The C++ Object Model) 对象模型如何影响程序(How the Object Model Effects Programs) 1.2 关键词所带来的差异(A Keyword Distinction) 关键词的困扰 策略性正确的struct(The Politically Correct Struct) 1.3 对象的差异(An Object Distinction) 指针的类型(The Type of a Pointer) 加上多态之后(Adding Polymorphism) 第2章 构造函数语意学(The Semantics of constructors) 2.1 Default Constructor的建构操作 “带有Default Constructor”的Member Class Object “带有Default Constructor”的Base Class “带有一个Virual Function”的Class “带有一个virual Base class”的Class 总结 2.2 Copy Constructor的建构操作 Default Memberwise Initialization Bitwise Copy Semantics(位逐次拷贝) 不要Bitwise Copy Semantics! 重新设定的指针Virtual Table 处理Virtual Base Class Subobject 2.3程序转换语意学(Program Transformation Semantics) 明确的初始化操作(Explicit Initialization) 参数的初始化(Argument Initialization) 返回值的初始化(Return Value Initialization) 在使用者层面做优化(Optimization at the user Level) 在编译器层面做优化(Optimization at the Compiler Level) Copy Constructor:要还是不要? 摘要 2.4 成员们的初始化队伍(Member Initialization List) 第3章 Data语意学(The Semantics of Data) 3.1 Data Member的绑定(The Binding of a Data Member) 3.2 Data Member的布局(Data Member Layout) 3.3 Data Member的存取 Static Data Members Nonstatic Data Member 3.4 “继承”与Data Member 只要继承不要多态(Inheritance without Polymorphism) 加上多态(Adding Polymorphism) 多重继承(Multiple Inheritance) 虚拟继承(Virtual Inheritance) 3.5 对象成员的效率(Object Member Efficiency) 3.6 指向Data Members的指针(Pointer to Data Members) “指向Members的指针”的效率问题 第4章 Function语意学(The Semantics of Function) 4.1 Member的各种调用方式 Nonstatic Member Functions(非静态成员函数) Virtual Member Functions(虚拟成员函数) Static Member Functions(静态成员函数) 4.2 Virtual Member Functions(虚拟成员函数) 多重继承下的Virtual Functions 虚拟继承下的Virtual Functions 4.3 函数的效能 4.4 指向Member Functions的指针(Pointer-to-Member Functions) 支持“指向Virtual Member Functions”之指针 在多重继承之下,指向Member Functions的指针 “指向Member Functions之指针”的效率 4.5 Inline Functions 形式对数(Formal Arguments) 局部变量(Local Variables) 第5章 构造、解构、拷贝 语意学(Semantics of Construction,Destruction,and Copy) 纯虚拟函数的存在(Presence of a Pure Virtual Function) 虚拟规格的存在(Presence of a Virtual Specification) 虚拟规格中const的存在 重新考虑class的声明 5.1 无继承情况下的对象构造 抽象数据类型(Abstract Data Type) 为继承做准备 5.2 继承体系下的对象构造 虚拟继承(Virtual Inheritance) 初始化语意学(The Semantics of the vptr Initialization) 5.3 对象复制语意学(Object Copy Semantics) 5.4 对象的功能(Object Efficiency) 5.5 解构语意学(Semantics of Destruction) 第6章 执行期语意学(Runting Semantics) 6.1 对象的构造和解构(Object Construction and Destruction) 全局对象(Global Objects) 局部静态对象(Local Static Objects) 对象数组(Array of Objects) Default Constructors和数组 6.2 new和delete运算符 针对数组的new语意 Placement Operator new的语意 6.3 临时性对象(Temporary Objects) 临时性对象的迷思(神话、传说) 第7章 站在对象模型的类端(On the Cusp of the Object Model) 7.1 Template Template的“具现”行为(Template Instantiation) Template的错误报告(Error Reporting within a Template) Template中的名称决议方式(Name Resolution within a Template) Member Function的具现行为(Member Function Instantiation) 7.2 异常处理(Exception Handling) Exception Handling快速检阅 对Exception Handling的支持 7.3 执行期类型识别(Runtime Type Identification,RTTI) Type-Safe Downcast(保证安全的向下转型操作) Type-Safe Dynamic Cast(保证安全的动态转型) References并不是Pointers Typeid运算符 7.4 效率有了,弹性呢? 动态共享函数库(Dynamic Shared Libraries) 共享内存(Shared Memory) 度的各种错误信息和迷思,但也指出其中某些成本和利益交换确实存在。他阐述了各式各样的实现模型,指出它们的进化之道及其本质因素。 编辑推荐 《深度探索C++对象模型》涵盖了C++对象模型的语意暗示,并指出这个模型是如何影响你的程序的。C++成山似海的书籍堆中,这一本不是婴幼儿奶粉,也不是较大婴儿奶粉,它是成人专用的低脂高钙特殊奶粉。 对于C++底层机制感兴趣的读者,这《深度探索C++对象模型》会给你"漫卷诗书喜欲狂"的感觉。 了解C++ Object Model,是学习Component Object Model的最短路线。 如果你是一位C++程序员,渴望对于底层知识获得一个完整的了解,那么Inside The C++ Object Model正适合你。 媒体推荐 前言 差不多有10年之久,我在贝尔实验室(Bell Laboratories)埋首于C++的实现任务。最初的工作是在cfront上面(Bjarne Stroustrup的第一个C++编译器),从1986年的1.1版到1991年9月的3.0版,然后移转到Simplifier(这是我们内部的命名),也就是Found~ion项目中的C++对象模型部分。在Simplifier设计期间,我开始酝酿这本书。 Foundation项目是什么?在Bjarne的领导下,贝尔实验室中的一个小组探索着以C++完成大规模程序设计时的种种问题的解决之道。Foundation项目是我们为了构造大系统而努力定义的一个新的开发模型;我们只使用C++,并不提供多重语言的解决方案。这是个令人兴奋的工作,一方面是因为工作本身,一方面是因为工作伙伴:Bjarne、Andy Koenig、Rob Murray、Martin Carroll、Judy Ward、Steve Buroff、Peter Juhl,以及我自己。Barbara Moo管理我们这一群人(Bjarne和Andy除外)。Barbara Moo常说管理一个软件团队,就像放牧一群骄傲的猫。 我们把Foundation想象成一个核心,在那上面,其它人可以为使用者铺设一层真正的开发环境,把它整修为他们所期望的UNIX或Smalltalk模型。私底下我们把它称为Grail(传说中耶稣最后的晚餐所用的圣杯),人人都想要,但是从来没人找到过! Grail使用一个由Rob Murray发展出来并命名为ALF的面向对象层次结构,提供一个永久的、以语意为基础的表现法。在Grail中,传统编译器被分解为数个各自分离的可执行文件。parser负责建立程序的ALF表现法。其它每一个组件(比如type checking、simplification,code generation)以及工具(比如browser)都在程序的一个ALF表现体上操作(并可能加以扩展)。Simplifier是编译器的一部分,处于typechecking和codegeneration之间。Simplifier这个名称是由Bjarne所倡议的,它原本是cfront的一个阶段(phase)。 在type checking和code generation之间,Simplifier做什么事呢?它用来转换内部的程序表现。有三种转换风味是任何对象模型都需要的: 1.与编译器息息相关的转换(Implementation,dependent transformations) 这是与特定编译器有关的转换。在ALF之下,这意味着我们所谓的“tentative”nodes。例如,当parser看到这个表达式: fct(); 它并不知道是否(a)这是一个函数调用操作,或者(b)这是overloaded call operator在class object fct上的一种应用。默认情况下,这个式子所代表的是一个函数调用,但是当(b)的情况出现时,Simplifier就要重写并调换call subtree。 2.语言语意转换(Language semantics transformations) 这包括constructor/destructor的合成和扩展、memberwise初始化、对于memberwise copy的支持、在程序胫邪膊錭onversion operators、临时性对象,以及对constructor/destructor的调用。 3.程序代码和对象模型的转换(Code and object model transformations) 这包括对virtual functions、virtual base class和inheritance的一般支持、new和delete运算符、class objects所组成的数组、local static class instances、带有非常量表达式(nonconstant expression)之global object的静态初始化操作。我对Simplifier所规划的一个目标是:提供一个对象模型体系,在其中,对象的实现是一个虚拟接口,支持各种对象模型。 最后两种类型的转换构成了本书的基础。这意味着本书是为编译器设计者而写的吗?不是,绝对不是!这本书是由一位编译器设计者针对中高级C++程序员所写的。隐藏在这本书背后的假设是,程序员如果了解C++对象模型,就可以写出比较没有错误倾向而且比较有效率的代码。 作者简介 Stanley Lippman目前是华特迪斯尼主题动画公司(Walt Disney Feature Animation)的主要软件工程师。他曾经在AT&T贝尔实验室领导cfront 3.0和2.1版的编译器开发小组。他也是贝尔实验室中由Bjame Stroustrup所领导的Foundation专案组中的一员,负责对象模型并研究C++程序开发环境。Stan著有极为成功的C++ Primer一书,也发表过许多C++方面的论文。Stan最近刚从C++ Report的编辑位置上“退隐”,他曾在那个位置上做了4年。他的C++论述遍及全球。 侯捷,海峡两岸著名的电脑技术自由作家,对于技术的钻研和发表,有独特的品性与坚持。作品涵盖著、译、评三方面,散见于各种刊特、媒体、网站论坛,深受读者喜爱和尊敬。 目录 本立道生(侯捷 译序) 目录 前言(Stanley B.Lippman) 第0章 导读(译者的话) 第1章 关于对象(Object Lessons) 加上封装后的布局成本(Layout Costs for Adding Encapsulation) 1.1 C++模式模式(The C++ Object Model) 简单对象模型(A Simple Object Model) 表格驱动对象模型(A Table-driven Object Model) C++对象模型(The C++ Object Model) 对象模型如何影响程序(How the Object Model Effects Programs) 1.2 关键词所带来的差异(A Keyword Distinction) 关键词的困扰 策略性正确的struct(The Politically Correct Struct) 1.3 对象的差异(An Object Distinction) 指针的类型(The Type of a Pointer) 加上多态之后(Adding Polymorphism) 第2章 构造函数语意学(The Semantics of constructors) 2.1 Default Constructor的建构操作 “带有Default Constructor”的Member Class Object “带有Default Constructor”的Base Class “带有一个Virual Function”的Class “带有一个virual Base class”的Class 总结 2.2 Copy Constructor的建构操作 Default Memberwise Initialization Bitwise Copy Semantics(位逐次拷贝) 不要Bitwise Copy Semantics! 重新设定的指针Virtual Table 处理Virtual Base Class Subobject 2.3程序转换语意学(Program Transformation Semantics) 明确的初始化操作(Explicit Initialization) 参数的初始化(Argument Initialization) 返回值的初始化(Return Value Initialization) 在使用者层面做优化(Optimization at the user Level) 在编译器层面做优化(Optimization at the Compiler Level) Copy Constructor:要还是不要? 摘要 2.4 成员们的初始化队伍(Member Initialization List) 第3章 Data语意学(The Semantics of Data) 3.1 Data Member的绑定(The Binding of a Data Member) 3.2 Data Member的布局(Data Member Layout) 3.3 Data Member的存取 Static Data Members Nonstatic Data Member 3.4 “继承”与Data Member 只要继承不要多态(Inheritance without Polymorphism) 加上多态(Adding Polymorphism) 多重继承(Multiple Inheritance) 虚拟继承(Virtual Inheritance) 3.5 对象成员的效率(Object Member Efficiency) 3.6 指向Data Members的指针(Pointer to Data Members) “指向Members的指针”的效率问题 第4章 Function语意学(The Semantics of Function) 4.1 Member的各种调用方式 Nonstatic Member Functions(非静态成员函数) Virtual Member Functions(虚拟成员函数) Static Member Functions(静态成员函数) 4.2 Virtual Member Functions(虚拟成员函数) 多重继承下的Virtual Functions 虚拟继承下的Virtual Functions 4.3 函数的效能 4.4 指向Member Functions的指针(Pointer-to-Member Functions) 支持“指向Virtual Member Functions”之指针 在多重继承之下,指向Member Functions的指针 “指向Member Functions之指针”的效率 4.5 Inline Functions 形式对数(Formal Arguments) 局部变量(Local Variables) 第5章 构造、解构、拷贝 语意学(Semantics of Construction,Destruction,and Copy) 纯虚拟函数的存在(Presence of a Pure Virtual Function) 虚拟规格的存在(Presence of a Virtual Specification) 虚拟规格中const的存在 重新考虑class的声明 5.1 无继承情况下的对象构造 抽象数据类型(Abstract Data Type) 为继承做准备 5.2 继承体系下的对象构造 虚拟继承(Virtual Inheritance) 初始化语意学(The Semantics of the vptr Initialization) 5.3 对象复制语意学(Object Copy Semantics) 5.4 对象的功能(Object Efficiency) 5.5 解构语意学(Semantics of Destruction) 第6章 执行期语意学(Runting Semantics) 6.1 对象的构造和解构(Object Construction and Destruction) 全局对象(Global Objects) 局部静态对象(Local Static Objects) 对象数组(Array of Objects) Default Constructors和数组 6.2 new和delete运算符 针对数组的new语意 Placement Operator new的语意 6.3 临时性对象(Temporary Objects) 临时性对象的迷思(神话、传说) 第7章 站在对象模型的类端(On the Cusp of the Object Model) 7.1 Template Template的“具现”行为(Template Instantiation) Template的错误报告(Error Reporting within a Template) Template中的名称决议方式(Name Resolution within a Template) Member Function的具现行为(Member Function Instantiation) 7.2 异常处理(Exception Handling) Exception Handling快速检阅 对Exception Handling的支持 7.3 执行期类型识别(Runtime Type Identification,RTTI) Type-Safe Downcast(保证安全的向下转型操作) Type-Safe Dynamic Cast(保证安全的动态转型) References并不是Pointers Typeid运算符 7.4 效率有了,弹性呢? 动态共享函数库(Dynamic Shared Libraries) 共享内存(Shared Memory)
用户评论
码姐姐匿名网友 2019-04-15 06:11:48

写的不错,下载下来有些内容自己拿来做电子版的笔记,多谢

码姐姐匿名网友 2019-04-15 06:11:48

永恒的經典!永遠無法被取代,這本書最好多看幾遍,隨著你工作深入,你會越來越覺得有意思

码姐姐匿名网友 2019-04-15 06:11:48

好书好书,值得一看

码姐姐匿名网友 2019-04-15 06:11:48

是个不错的资源,还要在慢慢研究下。

码姐姐匿名网友 2019-04-15 06:11:48

扫描版中算是清晰的了,带书签,不错。对!就是那本《深度探索C++对象模型》,侯捷 翻译版

码姐姐匿名网友 2019-04-15 06:11:48

就是不太清晰

码姐姐匿名网友 2019-04-15 06:11:48

对我帮助非常大

码姐姐匿名网友 2019-04-15 06:11:48

挺清晰的,深入学习c++的好书,感谢分享

码姐姐匿名网友 2019-04-15 06:11:48

超经典的C++书籍

码姐姐匿名网友 2019-04-15 06:11:48

终于找到了,非常清晰,很不错