猜你喜欢
深度探索C++对象模型

深度探索C++对象模型

书籍作者:Stanley ISBN:9787121149528
书籍语言:简体中文 连载状态:全集
电子书格式:pdf,txt,epub,mobi,azw3 下载次数:8336
创建日期:2021-02-14 发布日期:2021-02-14
运行环境:PC/Windows/Linux/Mac/IOS/iPhone/iPad/Kindle/Android/安卓/平板
内容简介
作者Lippman参与设计了全世界第一套C++编译程序cfront,这本书就是一位伟大的C++编译程序设计者向你阐述他如何处理各种explicit(明确出现于C++程序代码中)和implicit(隐藏于程序代码背后)的C++语意。
本书专注于C++面向对象程序设计的底层机制,包括结构式语意、临时性对象的生成、封装、继承,以及虚拟――虚拟函数和虚拟继承。这本书让你知道:一旦你能够了解底层实现模型,你的程序代码将获得多么大的效率。Lippman澄清了那些关于C++额外负荷与复杂度的各种错误信息和迷思,但也指出其中某些成本和利益交换确实存在。他阐述了各式各样的实现模型,指出它们的进化之道及其本质因素。书中涵盖了C++对象模型的语意暗示,并指出这个模型是如何影响你的程序的。
作者简介

Stanley B.Lippman

微软公司Visual C++ 团队的架构师。他从1984年开始在贝尔实验室与C++的设计者Bjarne Stroustrup一起从事C++的设计与开发。他还著有Inside the C++ Object Model。

目录
目  录
本立道生(侯捷 译序) III
目录 VII
前言(Stanley B. Lippman) XIII
第0章 导读(译者的话) XXV
第1章 关于对象(Object Lessons) 1
加上封装后的布局成本(Layout Costs for Adding Encapsulation) 5
1.1 C++对象模式(The C++ Object Model) 6
简单对象模型(A Simple Object Model) 7
表格驱动对象模型(A Table-driven Object Model) 8
C++对象模型(The C++ Object Model) 9
对象模型如何影响程序(How the Object Model Effects Programs) 13
1.2 关键词所带来的差异(A Keyword Distinction) 15
关键词的困扰 16
策略性正确的struct(The Politically Correct Struct) 19
1.3 对象的差异(An Object Distinction) 22
指针的类型(The Type of a Pointer) 28
加上多态之后(Adding Polymorphism) 29
第2章 构造函数语意学(The Semantics of Constructors) 37
2.1 Default Constructor的构造操作 39
“带有Default Constructor”的Member Class Object 41
“带有Default Constructor”的Base Class 44
“带有一个Virtual Function”的Class 44
“带有一个Virtual Base Class”的Class 46
总结 47
2.2 Copy Constructor的构造操作 48
Default Memberwise Initialization 49
Bitwise Copy Semantics(位逐次拷贝) 51
不要Bitwise Copy Semantics! 53
重新设定Virtual Table的指针 54
处理Virtual Base Class Subobject 57
2.3 程序转化语意学(Program Transformation Semantics) 60
显式的初始化操作(Explicit Initialization) 61
参数的初始化(Argument Initialization) 62
返回值的初始化(Return Value Initialization) 63
在使用者层面做优化(Optimization at the User Level) 65
在编译器层面做优化(Optimization at the Compiler Level) 66
Copy Constructor:要还是不要? 72
摘要 74
2.4 成员们的初始化队伍(Member Initialization List) 74
第3章 Data语意学(The Semantics of Data) 83
3.1 Data Member的绑定(The Binding of a Data Member) 88
3.2 Data Member的布局(Data Member Layout) 92
3.3 Data Member的存取 94
Static Data Members 95
Nonstatic Data Members 97
3.4 “继承”与Data Member 99
只要继承不要多态(Inheritance without Polymorphism) 100
加上多态(Adding Polymorphism) 107
多重继承(Multiple Inheritance) 112
虚拟继承(Virtual Inheritance) 116
3.5 对象成员的效率(Object Member Efficiency) 124
3.6 指向Data Members的指针(Pointer to Data Members) 129
“指向Members的指针”的效率问题 134
第4章 Function语意学(The Semantics of Function) 139
4.1 Member的各种调用方式 140
Nonstatic Member Functions(非静态成员函数) 141
Virtual Member Functions(虚拟成员函数) 147
Static Member Functions(静态成员函数) 148
4.2 Virtual Member Functions(虚拟成员函数) 152
多重继承下的Virtual Functions 159
虚拟继承下的Virtual Functions 168
4.3 函数的效能 170
4.4 指向Member Function的指针(Pointer-to-Member Functions) 174
支持“指向Virtual Member Functions”的指针 176
在多重继承之下,指向Member Functions的指针 178
“指向Member Functions之指针”的效率 180
4.5 Inline Functions 182
形式参数(Formal Arguments) 185
局部变量(Local Variables) 186
第5章 构造、析构、拷贝语意学(Semantics of Construction,
Destruction, and Copy) 191
纯虚函数的存在(Presence of a Pure Virtual Function) 193
虚拟规格的存在(Presence of a Virtual Specification) 194
虚拟规格中const的存在 195
重新考虑class的声明 195
5.1 “无继承”情况下的对象构造 196
抽象数据类型(Abstract Data Type) 198
为继承做准备 202
5.2 继承体系下的对象构造 206
虚拟继承(Virtual Inheritance) 210
vptr初始化语意学(The Semantics of the vptr Initialization) 213
5.3 对象复制语意学(Object Copy Semantics) 219
5.4 对象的效能(Object Efficiency) 225
5.5 析构语意学(Semantics of Destruction) 231
第6章 执行期语意学(Runtime Semantics) 237
6.1 对象的构造和析构(Object Construction and Destruction) 240
全局对象(Global Objects) 242
局部静态对象(Local Static Objects) 247
对象数组(Array of Objects) 250
Default Constructors和数组 252
6.2 new和delete运算符 254
针对数组的new语意 257
Placement Operator new的语意 263
6.3 临时性对象(Temporary Objects) 267
临时性对象的迷思(神话、传说) 275
第7章 站在对象模型的尖端(On the Cusp of the Object Model) 279
7.1 Template 280
Template的“实例化”行为(Template Instantiation) 281
Template的错误报告(Error Reporting within a Template) 285
Template中的名称决议法(Name Resolution within a Template) 289
Member Function的实例化行为(Member Function Instantiation) 292
7.2 异常处理(Exception Handling) 297
Exception Handling快速检阅 298
对Exception Handling的支持 303
7.3 执行期类型识别(Runtime Type Identification,RTTI) 308
Type-Safe Downcast(保证安全的向下转换操作) 310
Type-Safe Dynamic Cast(保证安全的动态转换) 311
References并不是Pointers 313
Typeid运算符 314
7.4 效率有了,弹性呢? 318
动态共享函数库(Dynamic Shared Libraries) 318
共享内存(Shared Memory) 318
短评

书很棒,很有价值

2020-11-21 23:48:57

很好,值得阅读。推荐推荐

2020-11-25 13:41:04

深度探索C++对象模型的书评

如果你跟我一样是个智商在250整点上的青年,如果你也觉得看看技术书,尤其是web青年都不待见的C++相关的技术书非常流弊,来试试吧,这本书最合适你了,看了之后也不用跟着写几行代码,顶多一把一把的薅头发,反正不费电!以前看书,书里总得告儿我别这样别那样,要这样要那样,...

2011-05-11 21:21:33

理由有以下几条 一、书比较老了,是在C++ 98标准出来之前写的 二、细节错误比较多,侯捷的翻译导读里说他更正了不少,可谁知道还有多少细节错误没发现;而且,我发现他的译文有些地方也有问题,原文本来正确的,却纠正成错的了 三、除非从事编译器方面的工作,没必要死抠细...

2008-04-05 22:58:53

其实完全可以用软件设计的视角来阅读这本书,在这本书中学到的不仅仅是语言,而是语言背后的东西——代码应该怎么写才会更有效率。软件设计中功能性的实现总是最低层次的,而软件背后的效率和设计的思想才更值得人去关注,linus反对用C++,因为用C完全能做到C++的效果,...

2012-01-30 14:33:45

这本书写得很拗口,侯捷的翻译也有很多不符合习惯的用词,所以读起来颇为费力。 总结一下: 1. 虚函数的实现: 为每个带有虚函数的类,建立一个虚函数表,存放这个类的每个虚函数的地址。基类和派生类的虚函数表有着不同的内容。 每个有虚函数的类的对象带...

2011-02-13 16:01:57

4年前临近毕业的时候无意中从学校图书馆发现了它,从第一页开始就被深深吸引住了,如饥似渴,一连几天都铺在上面,虽然后面的内容大多没有看懂。后来工作之后的两年中,此书起码通读了不下3遍,每次都有不同的体会-----经典的书籍就是这样,随着时光的流逝,更加沉淀出它的芬芳...

2010-05-21 08:03:52

第一代C++编译器开发主管所写。如果你想成为真正的C++高手,看这本书,他为你讲述了编译器在处理各种语法时在“后台”所做的事。对C++有较深入了解的读者会在读后有恍然大悟之感。候杰翻译,质量相当不错,但内容太深,只适合对C++有较深了解的读者。

2006-03-06 11:55:55

很好很强大,也非常深奥,比Effective系列深太多了。只有前5章勉强看懂。 这本书偏重的是C++内部实现,而effective则是讲C++的常用技术。虽然在技术上没有太大帮助,但绝对大大提高内功,会给你剖析了C++ class的实现机制。 建议想深入C++的人都读一读,会有一种醍醐灌顶的作用...

2013-09-08 09:39:28

这本书买了好几年了。开始看的时候,感觉很深入艰涩,比较高难。这种感觉是因为初学之时注重表面上的“用法”。当渐渐发现这些“用法”非常复杂,难以掌握驾驭的时候,回头再看这本书,却又发现它讲的都是最简洁基本的内容。如果学习的过程中能不时从这本书里得到基本原理的启...

2006-12-27 17:41:05

书里的最重要的部分还没有过时,对,我说的“最重要的部分”指的是对象模型。(其中提到的NRV技术目前的编译器基本都已经实现了,末尾的关于异常和模板的部分有充数的嫌疑) 书中关于数据成员的布局,非虚成员函数和虚函数的设计考量,在单继承,多继承/虚拟继承下都有详细的...

2014-11-16 19:53:53

C++程序员晋级必读书, 侯捷翻译的也相当出色, 正本书对C++的对象内存形式,继承的实现,多重继承,静态对象等做了详细描述。

2007-01-14 22:49:12

标签
C++,C/C++,编程,经典之作,计算机,面向对象,深度探索C++对象模型,计算机科学