深度探索C++對(duì)象模型

出版時(shí)間:2001-5  出版社:華中科技大學(xué)出版社  作者:[美] Stanley B. Lippman  頁(yè)數(shù):320  譯者:侯捷  
Tag標(biāo)簽:無(wú)  

內(nèi)容概要

本書(shū)重點(diǎn):探索“對(duì)象導(dǎo)向程序所支持的C++對(duì)象模型”下的程序行為。對(duì)于“對(duì)象導(dǎo)向性質(zhì)之基礎(chǔ)實(shí)現(xiàn)技術(shù)”以及“各種性質(zhì)背后的隱含利益交換”提供一個(gè)清楚的認(rèn)識(shí)。檢驗(yàn)由程序變形所帶來(lái)的效率沖擊。提供豐富的程序范例、圖片,以及對(duì)象導(dǎo)向觀念和底層對(duì)象模型之間的效率測(cè)量。
C++成山似海的書(shū)籍堆中,這一本不是嬰幼兒奶粉,也不是較大嬰兒奶粉,它是成人專(zhuān)用的低脂高鈣特殊奶粉。
對(duì)于C++底層機(jī)制感興趣的讀者,這本書(shū)會(huì)給你“漫卷詩(shī)書(shū)喜欲狂”的感覺(jué)。
了解C++ Object Model,是學(xué)習(xí)Component Object
Model的最短路線。
如果你是一位C++程序員,渴望對(duì)于底層知識(shí)獲得一個(gè)完整的了解,那么Inside The
C++ Object Model正適合你。
關(guān)于作者:Stanley Lippman目前是華特迪斯尼主題動(dòng)畫(huà)公司(Walt
Disney Feature Animation)的主要軟件工程師。他曾經(jīng)在AT&T貝爾實(shí)驗(yàn)室領(lǐng)導(dǎo)cfront
3.0和2.1版的編譯器開(kāi)發(fā)小組。他也是貝爾實(shí)驗(yàn)室中由Bjame
Stroustrup所領(lǐng)導(dǎo)的Foundation專(zhuān)案組中的一員,負(fù)責(zé)對(duì)象模型并研究C++程序開(kāi)發(fā)環(huán)境。Stan著有極為成功的C++
Primer一書(shū),也發(fā)表過(guò)許多C++方面的論文。Stan最近剛從C++
Report的編輯位置上“退隱”,他曾在那個(gè)位置上做了4年。他的C++論述遍及全球。
關(guān)于譯者:侯捷,海峽兩岸著名的電腦技術(shù)自由作家,對(duì)于技術(shù)的鉆研和發(fā)表,有獨(dú)特的品性與堅(jiān)持。作品涵蓋著、譯、評(píng)三方面,散見(jiàn)于各種刊特、媒體、網(wǎng)站論壇,深受讀者喜愛(ài)和尊敬。

作者簡(jiǎn)介

Stanley
B.Lippman的職業(yè)是提供關(guān)于C++和面向?qū)ο蟮挠?xùn)練、咨詢(xún)、設(shè)計(jì)和指導(dǎo)。他在成為一名獨(dú)立咨詢(xún)顧問(wèn)之前,曾經(jīng)是迪士尼動(dòng)化公司的首席軟件設(shè)計(jì)師。當(dāng)他在AT&T
Bell實(shí)驗(yàn)室的時(shí)候,領(lǐng)導(dǎo)了cfront 3.0版本和2.1版本的編譯器開(kāi)發(fā)組。他也是Bjarne
Stroustrup領(lǐng)導(dǎo)的Bell實(shí)驗(yàn)室Fo

書(shū)籍目錄

本立道生(侯捷 譯序)
目錄
前言(Stanley B.Lippman)
第0章 導(dǎo)讀(譯者的話(huà))
第1章 關(guān)于對(duì)象(Object Lessons)
加上封裝后的布局成本(Layout Costs for Adding Encapsulation)
1.1 C++模式模式(The C++ Object Model)
簡(jiǎn)單對(duì)象模型(A Simple Object Model)
表格驅(qū)動(dòng)對(duì)象模型(A Table-driven Object Model)
C++對(duì)象模型(The C++ Object Model)
對(duì)象模型如何影響程序(How the Object Model Effects Programs)
1.2 關(guān)鍵詞所帶來(lái)的差異(A Keyword Distinction)
關(guān)鍵詞的困擾
策略性正確的struct(The Politically Correct Struct)
1.3 對(duì)象的差異(An Object Distinction)
指針的類(lèi)型(The Type of a Pointer)
加上多態(tài)之后(Adding Polymorphism)
第2章 構(gòu)造函數(shù)語(yǔ)意學(xué)(The Semantics of constructors)
2.1 Default Constructor的建構(gòu)操作
“帶有Default Constructor”的Member Class Object
“帶有Default Constructor”的Base Class
“帶有一個(gè)Virual Function”的Class
“帶有一個(gè)virual Base class”的Class
總結(jié)
2.2 Copy Constructor的建構(gòu)操作
Default Memberwise Initialization
Bitwise Copy Semantics(位逐次拷貝)
不要Bitwise Copy Semantics!
重新設(shè)定的指針Virtual Table
處理Virtual Base Class Subobject
2.3 程序轉(zhuǎn)換語(yǔ)意學(xué)(Program Transformation Semantics)
明確的初始化操作(Explicit Initialization)
參數(shù)的初始化(Argument Initialization)
返回值的初始化(Return Value Initialization)
在使用者層面做優(yōu)化(Optimization at the user Level)
在編譯器層面做優(yōu)化(Optimization at the Compiler Level)
Copy Constructor:要還是不要?
摘要
2.4 成員們的初始化隊(duì)伍(Member Initialization List)
第3章 Data語(yǔ)意學(xué)(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
只要繼承不要多態(tài)(Inheritance without Polymorphism)
加上多態(tài)(Adding Polymorphism)
多重繼承(Multiple Inheritance)
虛擬繼承(Virtual Inheritance)
3.5 對(duì)象成員的效率(Object Member Efficiency)
3.6 指向Data Members的指針(Pointer to Data Members)
“指向Members的指針”的效率問(wèn)題
第4章 Function語(yǔ)意學(xué)(The Semantics of Function)
4.1 Member的各種調(diào)用方式
Nonstatic Member Functions(非靜態(tài)成員函數(shù))
Virtual Member Functions(虛擬成員函數(shù))
Static Member Functions(靜態(tài)成員函數(shù))
4.2 Virtual Member Functions(虛擬成員函數(shù))
多重繼承下的Virtual Functions
虛擬繼承下的Virtual Functions
4.3 函數(shù)的效能
4.4 指向Member Functions的指針(Pointer-to-Member Functions)
支持“指向Virtual Member Functions”之指針
在多重繼承之下,指向Member Functions的指針
“指向Member Functions之指針”的效率
4.5 Inline Functions
形式對(duì)數(shù)(Formal Arguments)
局部變量(Local Variables)
第5章 構(gòu)造、解構(gòu)、拷貝 語(yǔ)意學(xué)(Semantics of Construction,Destruction,and
Copy)
純虛擬函數(shù)的存在(Presence of a Pure Virtual Function)
虛擬規(guī)格的存在(Presence of a Virtual Specification)
虛擬規(guī)格中const的存在
重新考慮class的聲明
5.1 無(wú)繼承情況下的對(duì)象構(gòu)造
抽象數(shù)據(jù)類(lèi)型(Abstract Data Type)
為繼承做準(zhǔn)備
5.2 繼承體系下的對(duì)象構(gòu)造
虛擬繼承(Virtual Inheritance)
初始化語(yǔ)意學(xué)(The Semantics of the vptr Initialization)
5.3 對(duì)象復(fù)制語(yǔ)意學(xué)(Object Copy Semantics)
5.4 對(duì)象的功能(Object Efficiency)
5.5 解構(gòu)語(yǔ)意學(xué)(Semantics of Destruction)
第6章 執(zhí)行期語(yǔ)意學(xué)(Runting Semantics)
6.1 對(duì)象的構(gòu)造和解構(gòu)(Object Construction and Destruction)
全局對(duì)象(Global Objects)
局部靜態(tài)對(duì)象(Local Static Objects)
對(duì)象數(shù)組(Array of Objects)
Default Constructors和數(shù)組
6.2 new和delete運(yùn)算符
針對(duì)數(shù)組的new語(yǔ)意
Placement Operator new的語(yǔ)意
6.3 臨時(shí)性對(duì)象(Temporary Objects)
臨時(shí)性對(duì)象的迷思(神話(huà)、傳說(shuō))
第7章 站在對(duì)象模型的類(lèi)端(On the Cusp of the Object Model)
7.1 Template
Template的“具現(xiàn)”行為(Template Instantiation)
Template的錯(cuò)誤報(bào)告(Error Reporting within a Template)
Template中的名稱(chēng)決議方式(Name Resolution within a Template)
Member Function的具現(xiàn)行為(Member Function Instantiation)
7.2 異常處理(Exception Handling)
Exception Handling快速檢閱
對(duì)Exception Handling的支持
7.3 執(zhí)行期類(lèi)型識(shí)別(Runtime Type Identification,RTTI)
Type-Safe Downcast(保證安全的向下轉(zhuǎn)型操作)
Type-Safe Dynamic Cast(保證安全的動(dòng)態(tài)轉(zhuǎn)型)
References并不是Pointers
Typeid運(yùn)算符
7.4 效率有了,彈性呢?
動(dòng)態(tài)共享函數(shù)庫(kù)(Dynamic Shared Libraries)
共享內(nèi)存(Shared Memory)

媒體關(guān)注與評(píng)論

前言差不多有10年之久,我在貝爾實(shí)驗(yàn)室(Bell Laboratories)埋首于C++的實(shí)現(xiàn)任務(wù)。最初的工作是在cfront上面(Bjarne Stroustrup的第一個(gè)C++編譯器),從1986年的1.1版到1991年9月的3.0版,然后移轉(zhuǎn)到Simplifier(這是我們內(nèi)部的命名),也就是Found~ion項(xiàng)目中的C++對(duì)象模型部分。在Simplifier設(shè)計(jì)期間,我開(kāi)始醞釀這本書(shū)。    Foundation項(xiàng)目是什么?在Bjarne的領(lǐng)導(dǎo)下,貝爾實(shí)驗(yàn)室中的一個(gè)小組探索著以C++完成大規(guī)模程序設(shè)計(jì)時(shí)的種種問(wèn)題的解決之道。Foundation項(xiàng)目是我們?yōu)榱藰?gòu)造大系統(tǒng)而努力定義的一個(gè)新的開(kāi)發(fā)模型;我們只使用C++,并不提供多重語(yǔ)言的解決方案。這是個(gè)令人興奮的工作,一方面是因?yàn)楣ぷ鞅旧?,一方面是因?yàn)楣ぷ骰锇椋築jarne、Andy Koenig、Rob Murray、Martin Carroll、Judy Ward、Steve Buroff、Peter Juhl,以及我自己。Barbara Moo管理我們這一群人(Bjarne和Andy除外)。Barbara Moo常說(shuō)管理一個(gè)軟件團(tuán)隊(duì),就像放牧一群驕傲的貓。    我們把Foundation想象成一個(gè)核心,在那上面,其它人可以為使用者鋪設(shè)一層真正的開(kāi)發(fā)環(huán)境,把它整修為他們所期望的UNIX或Smalltalk模型。私底下我們把它稱(chēng)為Grail(傳說(shuō)中耶穌最后的晚餐所用的圣杯),人人都想要,但是從來(lái)沒(méi)人找到過(guò)!    Grail使用一個(gè)由Rob Murray發(fā)展出來(lái)并命名為ALF的面向?qū)ο髮哟谓Y(jié)構(gòu),提供一個(gè)永久的、以語(yǔ)意為基礎(chǔ)的表現(xiàn)法。在Grail中,傳統(tǒng)編譯器被分解為數(shù)個(gè)各自分離的可執(zhí)行文件。parser負(fù)責(zé)建立程序的ALF表現(xiàn)法。其它每一個(gè)組件(比如type checking、simplification,code generation)以及工具(比如browser)都在程序的一個(gè)ALF表現(xiàn)體上操作(并可能加以擴(kuò)展)。Simplifier是編譯器的一部分,處于typechecking和codegeneration之間。Simplifier這個(gè)名稱(chēng)是由Bjarne所倡議的,它原本是cfront的一個(gè)階段(phase)。    在type checking和code generation之間,Simplifier做什么事呢?它用來(lái)轉(zhuǎn)換內(nèi)部的程序表現(xiàn)。有三種轉(zhuǎn)換風(fēng)味是任何對(duì)象模型都需要的:  1.與編譯器息息相關(guān)的轉(zhuǎn)換(Implementation,dependent transformations)    這是與特定編譯器有關(guān)的轉(zhuǎn)換。在ALF之下,這意味著我們所謂的“tentative”nodes。例如,當(dāng)parser看到這個(gè)表達(dá)式:    fct();    它并不知道是否(a)這是一個(gè)函數(shù)調(diào)用操作,或者(b)這是overloaded call operator在class object fct上的一種應(yīng)用。默認(rèn)情況下,這個(gè)式子所代表的是一個(gè)函數(shù)調(diào)用,但是當(dāng)(b)的情況出現(xiàn)時(shí),Simplifier就要重寫(xiě)并調(diào)換call subtree。  2.語(yǔ)言語(yǔ)意轉(zhuǎn)換(Language semantics transformations)    這包括constructor/destructor的合成和擴(kuò)展、memberwise初始化、對(duì)于memberwise copy的支持、在程序脛邪膊錭onversion operators、臨時(shí)性對(duì)象,以及對(duì)constructor/destructor的調(diào)用。  3.程序代碼和對(duì)象模型的轉(zhuǎn)換(Code and object model transformations)    這包括對(duì)virtual functions、virtual base class和inheritance的一般支持、new和delete運(yùn)算符、class objects所組成的數(shù)組、local static class instances、帶有非常量表達(dá)式(nonconstant expression)之global object的靜態(tài)初始化操作。我對(duì)Simplifier所規(guī)劃的一個(gè)目標(biāo)是:提供一個(gè)對(duì)象模型體系,在其中,對(duì)象的實(shí)現(xiàn)是一個(gè)虛擬接口,支持各種對(duì)象模型。    最后兩種類(lèi)型的轉(zhuǎn)換構(gòu)成了本書(shū)的基礎(chǔ)。這意味著本書(shū)是為編譯器設(shè)計(jì)者而寫(xiě)的嗎?不是,絕對(duì)不是!這本書(shū)是由一位編譯器設(shè)計(jì)者針對(duì)中高級(jí)C++程序員所寫(xiě)的。隱藏在這本書(shū)背后的假設(shè)是,程序員如果了解C++對(duì)象模型,就可以寫(xiě)出比較沒(méi)有錯(cuò)誤傾向而且比較有效率的代碼。

編輯推薦

《深度探索C++對(duì)象模型》涵蓋了C++對(duì)象模型的語(yǔ)意暗示,并指出這個(gè)模型是如何影響你的程序的。C++成山似海的書(shū)籍堆中,這一本不是嬰幼兒奶粉,也不是較大嬰兒奶粉,它是成人專(zhuān)用的低脂高鈣特殊奶粉。對(duì)于C++底層機(jī)制感興趣的讀者,這《深度探索C++對(duì)象模型》會(huì)給你"漫卷詩(shī)書(shū)喜欲狂"的感覺(jué)。了解C++ Object Model,是學(xué)習(xí)Component Object Model的最短路線。如果你是一位C++程序員,渴望對(duì)于底層知識(shí)獲得一個(gè)完整的了解,那么Inside The C++ Object Model正適合你。

圖書(shū)封面

圖書(shū)標(biāo)簽Tags

無(wú)

評(píng)論、評(píng)分、閱讀與下載


    深度探索C++對(duì)象模型 PDF格式下載


用戶(hù)評(píng)論 (總計(jì)19條)

 
 

  •   本書(shū)不適合初學(xué)者,需要一定的c++基礎(chǔ)才能有所收獲
  •   經(jīng)典的書(shū)籍,修煉內(nèi)功
  •   該書(shū)適合有一定功底的C++學(xué)習(xí)者。
  •   書(shū)很好,和學(xué)校的一樣
  •   這本書(shū)的內(nèi)容不錯(cuò),以前看過(guò),重新學(xué)習(xí)一下
  •   學(xué)C++,看這本書(shū)沒(méi)人會(huì)后悔的,當(dāng)然要是看不懂那就沒(méi)辦法了。好書(shū)就是好書(shū)
  •   沙發(fā)~~
  •   這書(shū)非常好,經(jīng)典
  •   深度探索C 對(duì)象模型
  •   這本書(shū)名氣很大,很多人推薦
  •   物流要加強(qiáng)
  •   想要深入了解C 實(shí)現(xiàn)機(jī)制的可以看
  •   聽(tīng)名字很給力
  •   書(shū)質(zhì)量很不錯(cuò),侯捷老師的書(shū),內(nèi)容很有深度
  •     很好很好,C++正要學(xué)習(xí),還有C語(yǔ)言,大家能推薦一本經(jīng)典的書(shū)不,想學(xué)習(xí)linux驅(qū)動(dòng)開(kāi)發(fā)。不知有經(jīng)典的沒(méi)。
      剛看一少半,準(zhǔn)備春節(jié)之前看完,哈哈哈
      很好很好,C++正要學(xué)習(xí),還有C語(yǔ)言,大家能推薦一本經(jīng)典的書(shū)不,想學(xué)習(xí)linux驅(qū)動(dòng)開(kāi)發(fā)。不知有經(jīng)典的沒(méi)。
      剛看一少半,準(zhǔn)備春節(jié)之前看完,哈哈哈
  •     我說(shuō)下我的經(jīng)驗(yàn)吧,希望可以幫到后來(lái)者。
       我覺(jué)得這本書(shū)并不像很多人說(shuō)的那樣煎熬,關(guān)鍵是找一個(gè)實(shí)際的編譯系統(tǒng)實(shí)踐一下,看好類(lèi)的內(nèi)存布局和一些7788的反匯編,有了實(shí)踐的基礎(chǔ)去看就很簡(jiǎn)單了的其實(shí)。
      我花了大概半個(gè)月時(shí)間,在VS下摸索了類(lèi)的內(nèi)存布局,然后才看的這本書(shū),我20個(gè)小時(shí)就看完了,而且基本上都懂。
      
      有興趣可以去看下我摸索VS下C++類(lèi)對(duì)象內(nèi)存布局的時(shí)候?qū)懴碌墓P記,大概5~60頁(yè)的word吧。像我這樣來(lái)學(xué)的話(huà)我估計(jì)就不會(huì)有那么多人喊什么難了,關(guān)鍵的實(shí)踐,得多花時(shí)間去實(shí)踐,光靠腦子想是沒(méi)有意義的。
      我的筆記在博客園:
      http://www.cnblogs.com/lindeshi/archive/2012/10/20/2732590.html
      歡迎膜拜以及指正討論等等。
  •     做C++開(kāi)發(fā)8,9年了,雖然個(gè)人認(rèn)為也積累了一些語(yǔ)言方面的開(kāi)發(fā)經(jīng)驗(yàn),可是看到這本書(shū)以后,發(fā)現(xiàn)自己了解的內(nèi)容還是太膚淺了,雖然這本書(shū)中介紹的內(nèi)容并不能直接用于平時(shí)的項(xiàng)目開(kāi)發(fā),可是它能夠讓你對(duì)這門(mén)語(yǔ)言有一個(gè)更為深入的了解,同時(shí)也能夠?qū)γ嫦驅(qū)ο蟮木幊趟枷胗辛烁鼮樯钊氲睦斫狻?br />   自從拿到這本書(shū)以后,我已經(jīng)連續(xù)通讀過(guò)三遍了,每一次都能夠得到更多更新的的體會(huì)。
  •      我是以日記的形式寫(xiě)下,寫(xiě)完發(fā)覺(jué)有些書(shū)評(píng)的性質(zhì),就發(fā)到此處。
      
       首先說(shuō) 《深度探索 C++ 對(duì)象模型》 是一本書(shū),一本介紹 C++ 對(duì)象模型的書(shū),這是一本獨(dú)一無(wú)二的從編譯器的解讀來(lái)闡述 C++ 對(duì)象模型的書(shū)籍,因著編譯器的設(shè)計(jì)者和學(xué)習(xí)者全球本來(lái)就少,加之深度研究 C++ 的更是二月里的29號(hào),少之又少。所以界外人士不可知,正常;界內(nèi)人士不可知,可諒。
      
       然書(shū)非界不能讀也,對(duì)于此論,我頗贊成:我有足夠的書(shū)籍來(lái)證明。在我書(shū)架上的,恰恰是每個(gè)領(lǐng)域頂端的專(zhuān)著,權(quán)威而且多大絕版。我也想多少人那樣求之不得,最后求得了,反倒不求了。他們是靜靜的躺在書(shū)架,只能證實(shí)我當(dāng)初的野心,也象征性的說(shuō)明我后來(lái)的俗氣。直到某天某個(gè)時(shí)刻,有人問(wèn)我些許問(wèn)題了,我開(kāi)始想了,想到了所有的情況,最后定格在某本書(shū)上,然后下載電子書(shū),查找內(nèi)容。最后卻猛拍腦門(mén),我腦門(mén)后面不是有嗎?這才看到它們得意而蔑視的姿態(tài)。
      
       像這樣一本 <深度探索 C++ 對(duì)象模型》更甚。以至于我每次掃描書(shū)架,全然不見(jiàn)他瘦弱的身軀?;蛟S它太薄了,容不在我狂妄的視野里;又或許它太矮了,根本沒(méi)有入我眼的條件。就這樣,它默默無(wú)聞,我渾然不知。直到同學(xué)問(wèn)起我一些C++ 的語(yǔ)法相關(guān)概念的時(shí)候,我給他們解釋語(yǔ)法,他們卻問(wèn)為何如此?為何如此,這個(gè)得問(wèn)編譯器了。我才知曉這本書(shū)的價(jià)值到了展現(xiàn)的時(shí)候了,我再次看這本書(shū),里面雖然不是嬰幼兒奶粉,是成人專(zhuān)用的低脂高鈣特殊奶粉,卻恰巧生在了我的手里,我賦予了它新的生命,正如霍金之于物理學(xué),我將之平易的闡述,將復(fù)雜的問(wèn)題簡(jiǎn)單化,有什么能快樂(lè)甚此呢? 也許該懷念遠(yuǎn)古時(shí)期的希臘,沒(méi)有健全的知識(shí),蘇格拉底就用他的思維來(lái)推導(dǎo),可以想象當(dāng)時(shí)他快樂(lè)的神態(tài)。
      
       諸多問(wèn)題,解決問(wèn)題有很多,如果非要打破沙鍋問(wèn)到底,南無(wú)阿彌陀佛,你成佛了。因?yàn)樽罱K的緣由只有一個(gè),所以看看這本書(shū),你知道了 C++ 在你的計(jì)算機(jī)內(nèi)存里怎樣的形式存放,又以怎樣的形式來(lái)運(yùn)轉(zhuǎn),從而促成你所要表達(dá)的界面。
      
       好比我們要同一個(gè)人過(guò)活,非要深刻的了解它不可。同樣的,我們?nèi)绻?C++ 的飯碗,那么,你就要扒光它的衣服,到里面探個(gè)究竟了。。。
  •     書(shū)中有不少錯(cuò)誤,自己去印證書(shū)中的一些模型發(fā)現(xiàn)是有區(qū)別的.
      
      但還是好書(shū),我不知道能多大程度提升編程質(zhì)量,因?yàn)槲也皇潜е@個(gè)目的讀的.但對(duì)喜歡了解底層的人來(lái)說(shuō),這書(shū)絕對(duì)不乏味
 

250萬(wàn)本中文圖書(shū)簡(jiǎn)介、評(píng)論、評(píng)分,PDF格式免費(fèi)下載。 第一圖書(shū)網(wǎng) 手機(jī)版

京ICP備13047387號(hào)-7