深度探索C++对象模型

[美] Stanley B. Lippman

出版时间

2012-01-01

ISBN

9787121149528

评分

★★★★★
AI导读
核心看点
  • 由C++编译器设计者撰写,揭示对象底层实现机制
  • 深入解析封装、继承、多态及临时对象的语意与成本
  • 澄清C++性能迷思,帮助编写高效且符合标准的代码
适合谁读
  • 希望深入理解C++底层机制与对象模型的进阶开发者
  • 对编译器原理、内存布局及执行期行为感兴趣的读者
  • 准备C++高阶面试或从事系统级开发的程序员
读前提醒
  • 基于C++98标准,部分细节需结合现代C++标准理解
  • 内容偏底层理论,建议具备扎实C++基础后再阅读
  • 注意书中个别技术细节可能已过时,需批判性阅读
读者共识
  • C++进阶必读经典,读完对语言设计有恍然大悟之感
  • 翻译质量参差不齐,部分术语晦涩,建议对照原文
  • 虽内容稍显陈旧且枯燥,但仍是理解OO本质的佳作

本导读基于书籍简介、目录、原文摘录、短评和书评生成,不等同于全文精读。

精彩摘录
  • "在这四种情况中,程序可以被正确编译并执行,但是效率不彰。"
  • "You mustuse the member initialization list in the following cases in order for your program to compile 1. When initializing a reference member 2. When initializing a const member 3. When invoking a base or member class constructor with a set of arguments In the fourth case, the program compiles and "
  • "1. b[i] + c[i] 对应一个 2. b[i] * c[i] 对应一个 3. 上述两个临时对象的相减结果需要一个来存放 4. 两个临时对象,分别用来放置上述第一个临时对象和第二个临时对象,为的是完成第三个临时对象"
  • "RIIT 就是为了 EH (Exception Handling) 的副产物"
  • "然而如果企图以一个RedPanda object作为little_critter的初值,编译器必须判断“后续当程序员企图存取其ZooAnimal subobject时是否能够正确地执行”(这是一个理性的程序员所期望的)"
  • "foobar()函数中的L5,有个 Point object local,同样也是既没有被构造也没有被析构。当然啦,Point object local如果没有先经过初始化,可能会成为一个潜在的程序“臭虫”——万一第一次使用它就需要其初值的话(像L7)。至于 heap object在L6的初始化操作: 6)Point * heap = new Point; 会被转为对new运算符(由library提供)的调用: Point *heap = __new( sizeof( Point ) ); 再一次强调一下,并没有 default constructor施行于new运算符所传过的Point身上。"
作者简介
Stanley B. Lippman 是微软公司 Visual C++ 团队的架构师。他从1984年开始在贝尔实验室与 C++ 的设计者 Bjarne Stroustrup 一起从事 C++ 的设计与开发。他还著有 Inside the C++ Object Model。
目录
本立道生(侯捷 译序) III
前言(Stanley B. Lippman) XIII
第0章 导读(译者的话) XXV
第1章 关于对象(Object Lessons) 1
加上封装后的布局成本(Layout Costs for Adding Encapsulation) 5

显示全部
用户评论
对于了解C++对象模型的底层实现,理清C++在实现OO的机制,很有帮助。
面试必备
按简介读了1, 3, 4章. 学到的东西足够应付面试了. 书里讲了很多编译器底层的内容, 可惜实在晦涩难懂, 一方面是这些内容本身高深, 另一方面作者笔力也属实不够. 这本书已经出版20多年, 希望未来能有更现代且更易懂的书推出
写作风格非常奇怪 以及小错误非常多 造成了理解上的困难
大体还算流畅,比如说从最简单的布局/语义入手,然后一步步加继承、多态、多重继承、虚拟继承,或是加全局、静态。不过很多地方推动的还是不自然,比如说为什么要有dynamic_cast, 为什么要有distinction。 另外作者是完全不更新了吗,这么多年C++增加了好多内容,好歹也写下move semantics吧。lol anyway,整体上学了很多知识,知道了更多“当代码跑起来,实际发生了什么”。
理解C++对象模型必看的一本书。推荐用 C++ Insight/编译器打印内存布局的 flag 跑书中的代码,好形成直观的理解。P.S. 有些地方还是看得半懂不懂,以后再看。
目前对c++的使用还太少,对编译链接等等的了解也不深,所以书中好多内容不明白,日后应该会再读
受益匪浅,值得反复阅读。不过有门槛,不建议初学者硬读。
快速翻完了前五章,对于C++对象构造拷贝和析构,对象的成员变量访问和函数调用过程有了更深的理解,第二章和第四章是精华。
下载
收藏