第一图书网

深度探索C++对象模型

斯坦利·B.李普曼 电子工业出版社
出版时间:

2012-1  

出版社:

电子工业出版社  

作者:

斯坦利·B.李普曼  

页数:

356  

译者:

侯捷  

Tag标签:

无  

内容概要

  作者Lippman参与设计了全世界第一套C++编译程序cfront,这本书就是一位伟大的C++编译程序设计者向你阐述他如何处理各种explicit(明确出现于C++程序代码中)和implicit(隐藏于程序代码背后)的C++语意。
  本书专注于C++面向对象程序设计的底层机制,包括结构式语意、临时性对象的生成、封装、继承,以及虚拟——虚拟函数和虚拟继承。这本书让你知道:一旦你能够了解底层实现模型,你的程序代码将获得多么大的效率。Lippman澄清了那些关于C++额外负荷与复杂度的各种错误信息和迷思,但也指出其中某些成本和利益交换确实存在。他阐述了各式各样的实现模型,指出它们的进化之道及其本质因素。书中涵盖了C++对象模型的语意暗示,并指出这个模型是如何影响你的程序的。
  作者Lippman参与设计了全世界第一套C++编译程序cfront,这本书就是一位伟大的C++编译程序设计者向你阐述他如何处理各种explicit(明确出现于C++程序代码中)和implicit(隐藏于程序代码背后)的C++语意。
  本书专注于C++面向对象程序设计的底层机制,包括结构式语意、临时性对象的生成、封装、继承,以及虚拟——虚拟函数和虚拟继承。这本书让你知道:一旦你能够了解底层实现模型,你的程序代码将获得多么大的效率。Lippman澄清了那些关于C++额外负荷与复杂度的各种错误信息和迷思,但也指出其中某些成本和利益交换确实存在。他阐述了各式各样的实现模型,指出它们的进化之道及其本质因素。书中涵盖了C++对象模型的语意暗示,并指出这个模型是如何影响你的程序的。
  对于C++底层机制感兴趣的读者,这必然是一本让你大呼过瘾的绝妙好书。

作者简介

作者:(美)Lippman

书籍目录

目  录
本立道生(侯捷 译序) III
目录 VII
前言(Stanley B. Lippman) XIII
第0章 导读(译者的话) XXV
第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
“带有一个Virtual Function”的Class
“带有一个Virtual 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 Members
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 Function的指针(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)
vptr初始化语意学(The Semantics of the vptr Initialization)
5.3 对象复制语意学(Object Copy Semantics)
5.4 对象的效能(Object Efficiency)
5.5 析构语意学(Semantics of Destruction)
第6章 执行期语意学(Runtime 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)

章节摘录

版权页: 插图: Member Function的实例化行为(Member Function Instantiation)对于template的支持,最困难的莫过于template function的实例化(instantiation)。目前的编译器提供了两个策略:一个是编译时期策略,程序代码必须在program text file中备妥可用; 另一个是链接时期策略,有一些meta.compilation工具可以导引编译器的实例化行为(instantiation)。 下面是编译器设计者必须回答的三个主要问题: 1.编译器如何找出函数的定义? 答案之一是包含template program text file,就好像它是一个header文件一样。 Borland编译器就遵循这个策略。另一种方法是要求一个文件命名规则,例如,我们可以要求,在Point.h文件中发现的函数声明,其template program text一定要放置于文件Point.C或Point.cpp中,依此类推。cfront就遵循这个策略。Edison DesignGroup编译器对这两种策略都支持。 2.编译器如何能够只实例化程序中用到的member functions? 解决办法之一就是,根本忽略这项要求,把一个已经实例化的class的所有member functions都产生出来。Borland就是这么做的——虽然它也提供#pragmas让你压制(或实例化)特定实例。另一种策略就是模拟链接操作,检测看看哪一个函数真正需要,然后只为它(们)产生实例。cfront就是这么做的。Edison DesignGroup编译器对这两种策略都支持。 3.编译器如何阻止member definitions在多个.o文件中都被实例化呢? 解决办法之一就是产生多个实例,然后从链接器中提供支持,只留下其中一个实例,其余都忽略。另一个办法就是由使用者来导引“模拟链接阶段”的实例化策略,决定哪些实例(instances)才是所需求的。 目前,不论是编译时期还是链接时期的实例化(instantiation)策略,均存在以下弱点:当template实例被产生出来时,有时候会大量增加编译时间。很显然,这将是template functions第一次实例化时的必要条件。然而当那些函数被非必要地再次实例化,或是当“决定那些函数是否需要再实例化”所花的代价太大时,编译器的表现令人失望! C++支持template的原始意图可以想见是一个由使用者导引的自动实例化机制(use—directed automatic instantiation mechanism),既不需要使用者的介入,也不需要相同文件有多次的实例化行为。但是这已被证明是非常难以达成的任务,比任何人此刻所能想象的还要难(请参考[S7ROUP94])。ptlink,随着cfront 3.0版所附的原始实例化工具,提供了一个由使用者驱动的自动实例化机制(use—drivenautomatic instantiation mechanism),但它实在太复杂了,即使是久经世故的人也没法一下子了解。


编辑推荐

《深度探索C++对象模型》重点探索了“面向对象程序所支持的C++对象模型”下的程序行为,对于“面向对象性质的基础实现技术”以及“各种性质背后的隐含利益交换”提供了一个清楚的认识,检验了由程序变形所带来的效率冲击,提供了丰富的程序范例、图片,以及面向对象观念和底层对象模型之间的效率测量。

图书封面

图书标签Tags

广告

下载页面


深度探索C++对象模型 PDF格式下载



这本书很实用!专注C++底层机制 优化代码


C++的底层细节。书是好书,很有价值。能理解其中的细节做法,在编写C++的程序过程中,也会有所启发。而且对程序的效率也会有新的认识。


了解C++底层,可以设计出性能好点的程序


这本书刚开始看,有关C++如何运行的,讲的很深刻,关于底层如何运行的,对于了解面向对象有很大帮助,强烈推荐


C++与Java不同,它是一个趋于"完全结构化"与"一切对象"之间的语言,不象Java是一门"一切对象"的语言。在使用C++中不可避免的要使用并了解对象其中的底层知识。而这本书完全满足了对C++底层知识的了解。


很好的一本书,只是不太适合初学者的,我做了1年半的C++开发,才勉强看懂。书中对于C++的底层实现和原理讲的很详细。


对深入理解C++对象模型和内存结构很有帮助。


书分析C++底层机制很透彻,值得一读


lippman的书是没的说的 讲解的很是到位 不过适合有基础的读者而不是C++新手


侯捷的书都是很好


侯捷老师的书,鞭辟入里,非常好,送货迅速,值得拥有。


对c++的理解很有帮助,从编译器的角度剖析c++的机制


前6章讲解得很好,第七章较为简略,需要结合其他书籍再看。第七章最后一节更加简略了,应该能够再讲深入一点。建议在有C++基础的情况下阅读本书,收货会更大,否则感觉会云里雾里。


详细描述了C++实现的各个细节,编译器默默的做了哪些事情以及为什么 对实践很有帮助


刚到手还没看,书给人的感觉很好
经典书籍,定好好吸收


还没开始看,但是这确实是一本很棒的书,不然我也不会买。


内容比较深,不适合像我这样的初学者,但虚函数的章节还是受益匪浅


书还是不错的么 为了学知识 好书


准备好好阅读以下,不过很多人都推荐这本书,侯的书应该是很不错的


书可以,质量很好,送货也较快;总之是一本好书


还没开始看, 抱怨下快递, 书籍没保护好, 有破损, 希望当当在书籍保护方面可以加强。一个塑料袋明显不行。。。


经典图书+经典的翻译,慢慢看,要想成为一个高手,必须认真学的书之一


十分好的C++进阶书籍,值得阅读。挺不错的!


是本好书,但不适合初学者看。


书非常给力,但是偏深,不适合初学者


书是正版的,不错,内容就不多说了,百度上有的是,大师的作品。经典。


c++必备. 大家都知道.


提高C++功力的好资料!知其所以然的好书!


C++编程提高必读之书~


C++程序员必须拥有


C++进阶的好书,毅然买了!


如果你已经有基础了,并且有了一定的实践。一定要看看这本书,会让你发现另一片天地。


这本书非常的好 不过 特别深 基础特好的话可以看看


非常不错的书,能加深对c++的理解。


书的质量很好,翻了下算法精解,讲得挺细的,还有图文描述,另一本是别人推荐的,感觉内容比较不容易领悟


这书真的不错,下次会再光顾的


还没读不过当当送货和书真的是没的说


还是在当当上买书给力


探究根本的第一步


讲的透彻,也很通俗,正在研读中。


经典,没啥好说的,就是老了点,重版后价格贵了点


做c++必读


还没看,听说不错买来看看


还好~~~~~


有挑战。。。。。


还没有看,准备学


质量很好啊啊啊质量很好啊啊啊质量很好啊啊啊


嗯,是在图书频道的推荐里看到的,感觉还好吧。


编程圣典


大师的作品,要好好看


商品好是好,但对我这个初学者来说不怎


经典没看呢


书本身内容不错加上不错的出版社 总体感觉很好


正版新书,质量不错,价格实惠。


质量挺好 发货很快


我粗略看了下,感觉内容还不错,纸质感觉还可以!总的来说还是感觉挺好的


内容较深,有难度


侯捷 的书一直比较经典,不是入门,可以深入理解C++


如果想深度研习c++,除了这本书,我就不知道其他的了


书绝对是超值的好书,内容非常好,加上是超级牛人老侯翻译的,很不错,物流也快但我非常不满意的是排版印刷的字太小,看起来费劲,要拿放大镜辅助,太郁闷了到底把字印这么小,能省几个钱?又不是我们读者不掏钱,本来这本书就不便宜,字搞这么小,又不是小说看一遍就完了,这种书要反复看,反复上机试验的,长期看,眼镜还受得了得了,我反正也有网上下载的扫描版,我打印出打字了,这本书就压在箱底吧


确实是一本好书,建议大家都买


经典中的经典,这个书是必看的


这是一本关于C++开发的国外工具书,值得一读.


好书好书,学习去了


好书,就是看不太懂


买了两本书,这本书还没开始读,大家之作了,好好拜读下吧。


这本书内容不错,就是比较老了,比较难,需要有一定的基础才能读


纸质一般吧,书还没看


感觉还行,只得一读


学习c++的利器


还没看,感觉很深。


印刷粗糙 纸张有点次...


刚开始看,看我网上介绍,应该是一本好书


这本书还没怎么看,但听朋友说这本书不是那么容易理解


侯捷先生的文笔确实与众不同。以前看过英文原版,现在看中文似乎理解的更深刻了,我喜欢侯捷先生的书


昨天刚拿到书,封面有3个像被重物砸的痕迹,其中一个穿了十几页的小洞。。。


作者没的说,是大牛,译者也很出名还没看完,看了大约半本,还是在很大程度上加深了我对C++的理解.我觉得使用过一段时间C++的同学都应该看一看,以便做到知其所以然,呵呵.以后也可以和人讲精通C++了


纸张质量不是很好,中间很多页连在一起的。


虽然图书馆有,但还是想买一本,因为这是本难得的好书,当然内容也比较难。可惜之前价格太高了,现在降价这么多,正好出手。可惜我买的这本质量很差,因为图书馆的这书纸是洁白的,而且很有重量;而我买得纸是发黄的,重量也是轻飘飘的,而且有很重的油墨味。也许是先前版本太贵了,因此新版本(书上写的是2010年5月第10次印刷)偷工减料,所以才会这么便宜。但不管怎么说,印刷的还算不错,字迹清楚,用手摸也不会发黑。何况是好书,对得起这价格。


纸质不好,内容还是不错的


好书,不过纸质太粗糙了。


印刷质量太差,希望卓越下次能把好关。


唯一唯一的缺陷在于,原书(英文版)的错误很多...


书还是不错的,就是字有点小,呵呵


还可以一个星期看完。。。。有些东西讲的很费解没有什么意思,,,,


翻译的很好,很容易看懂,BAT许多的面试题都源自书中案例。


书很好,就是纸质不好


1、包装还不错,比我在别的地方买的都好点。2、但是不 知道为什么打开来后封面好脏3、快递真心不行,因为是付了款的,东西扔房东那里也不给本人打电话通知了,搞的以为东西没了。


听说是深入学习必备啊


适合有一定基础的码农!初级码农还是先读C++ Primer比较稳妥!


看过电子版,再看纸质的感觉还是比较好的


没事翻来看看 很好的一本书


可以帮助你深刻的理解C++ 类对象是如何映射到内存中去的。


我相信侯捷的选择 + 纸是比较轻的那种 很喜欢


深入C 内部机理的书


学习C 必看


好书,对C 的模型介绍很清楚


相关图书