出版時間:2012-1 出版社:電子工業(yè)出版社 作者:斯坦利·B.李普曼 頁數(shù):356 譯者:侯捷
Tag標簽:無
內(nèi)容概要
作者Lippman參與設(shè)計了全世界第一套C++編譯程序cfront,這本書就是一位偉大的C++編譯程序設(shè)計者向你闡述他如何處理各種explicit(明確出現(xiàn)于C++程序代碼中)和implicit(隱藏于程序代碼背后)的C++語意。
本書專注于C++面向?qū)ο蟪绦蛟O(shè)計的底層機制,包括結(jié)構(gòu)式語意、臨時性對象的生成、封裝、繼承,以及虛擬——虛擬函數(shù)和虛擬繼承。這本書讓你知道:一旦你能夠了解底層實現(xiàn)模型,你的程序代碼將獲得多么大的效率。Lippman澄清了那些關(guān)于C++額外負荷與復(fù)雜度的各種錯誤信息和迷思,但也指出其中某些成本和利益交換確實存在。他闡述了各式各樣的實現(xiàn)模型,指出它們的進化之道及其本質(zhì)因素。書中涵蓋了C++對象模型的語意暗示,并指出這個模型是如何影響你的程序的。
作者Lippman參與設(shè)計了全世界第一套C++編譯程序cfront,這本書就是一位偉大的C++編譯程序設(shè)計者向你闡述他如何處理各種explicit(明確出現(xiàn)于C++程序代碼中)和implicit(隱藏于程序代碼背后)的C++語意。
本書專注于C++面向?qū)ο蟪绦蛟O(shè)計的底層機制,包括結(jié)構(gòu)式語意、臨時性對象的生成、封裝、繼承,以及虛擬——虛擬函數(shù)和虛擬繼承。這本書讓你知道:一旦你能夠了解底層實現(xiàn)模型,你的程序代碼將獲得多么大的效率。Lippman澄清了那些關(guān)于C++額外負荷與復(fù)雜度的各種錯誤信息和迷思,但也指出其中某些成本和利益交換確實存在。他闡述了各式各樣的實現(xiàn)模型,指出它們的進化之道及其本質(zhì)因素。書中涵蓋了C++對象模型的語意暗示,并指出這個模型是如何影響你的程序的。
對于C++底層機制感興趣的讀者,這必然是一本讓你大呼過癮的絕妙好書。
作者簡介
作者:(美)Lippman
書籍目錄
目 錄
本立道生(侯捷 譯序) III
目錄 VII
前言(Stanley B. Lippman) XIII
第0章 導(dǎo)讀(譯者的話) XXV
第1章 關(guān)于對象(Object Lessons)
加上封裝后的布局成本(Layout Costs for Adding Encapsulation)
1.1 C++對象模式(The C++ Object Model)
簡單對象模型(A Simple Object Model)
表格驅(qū)動對象模型(A Table-driven Object Model)
C++對象模型(The C++ Object Model)
對象模型如何影響程序(How the Object Model Effects Programs)
1.2 關(guān)鍵詞所帶來的差異(A Keyword Distinction)
關(guān)鍵詞的困擾
策略性正確的struct(The Politically Correct Struct)
1.3 對象的差異(An Object Distinction)
指針的類型(The Type of a Pointer)
加上多態(tài)之后(Adding Polymorphism)
第2章 構(gòu)造函數(shù)語意學(xué)(The Semantics of Constructors)
2.1 Default Constructor的構(gòu)造操作
“帶有Default Constructor”的Member Class Object
“帶有Default Constructor”的Base Class
“帶有一個Virtual Function”的Class
“帶有一個Virtual 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)化語意學(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 成員們的初始化隊伍(Member Initialization List)
第3章 Data語意學(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 Members
3.4 “繼承”與Data Member
只要繼承不要多態(tài)(Inheritance without Polymorphism)
加上多態(tài)(Adding Polymorphism)
多重繼承(Multiple Inheritance)
虛擬繼承(Virtual Inheritance)
3.5 對象成員的效率(Object Member Efficiency)
3.6 指向Data Members的指針(Pointer to Data Members)
“指向Members的指針”的效率問題
第4章 Function語意學(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 Function的指針(Pointer-to-Member Functions)
支持“指向Virtual Member Functions”的指針
在多重繼承之下,指向Member Functions的指針
“指向Member Functions之指針”的效率
4.5 Inline Functions
形式參數(shù)(Formal Arguments)
局部變量(Local Variables)
第5章 構(gòu)造、析構(gòu)、拷貝語意學(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 “無繼承”情況下的對象構(gòu)造
抽象數(shù)據(jù)類型(Abstract Data Type)
為繼承做準備
5.2 繼承體系下的對象構(gòu)造
虛擬繼承(Virtual Inheritance)
vptr初始化語意學(xué)(The Semantics of the vptr Initialization)
5.3 對象復(fù)制語意學(xué)(Object Copy Semantics)
5.4 對象的效能(Object Efficiency)
5.5 析構(gòu)語意學(xué)(Semantics of Destruction)
第6章 執(zhí)行期語意學(xué)(Runtime Semantics)
6.1 對象的構(gòu)造和析構(gòu)(Object Construction and Destruction)
全局對象(Global Objects)
局部靜態(tài)對象(Local Static Objects)
對象數(shù)組(Array of Objects)
Default Constructors和數(shù)組
6.2 new和delete運算符
針對數(shù)組的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 執(zhí)行期類型識別(Runtime Type Identification,RTTI)
Type-Safe Downcast(保證安全的向下轉(zhuǎn)換操作)
Type-Safe Dynamic Cast(保證安全的動態(tài)轉(zhuǎn)換)
References并不是Pointers
Typeid運算符
7.4 效率有了,彈性呢?
動態(tài)共享函數(shù)庫(Dynamic Shared Libraries)
共享內(nèi)存(Shared Memory)
章節(jié)摘錄
版權(quán)頁: 插圖: Member Function的實例化行為(Member Function Instantiation)對于template的支持,最困難的莫過于template function的實例化(instantiation)。目前的編譯器提供了兩個策略:一個是編譯時期策略,程序代碼必須在program text file中備妥可用; 另一個是鏈接時期策略,有一些meta.compilation工具可以導(dǎo)引編譯器的實例化行為(instantiation)。 下面是編譯器設(shè)計者必須回答的三個主要問題: 1.編譯器如何找出函數(shù)的定義? 答案之一是包含template program text file,就好像它是一個header文件一樣。 Borland編譯器就遵循這個策略。另一種方法是要求一個文件命名規(guī)則,例如,我們可以要求,在Point.h文件中發(fā)現(xiàn)的函數(shù)聲明,其template program text一定要放置于文件Point.C或Point.cpp中,依此類推。cfront就遵循這個策略。Edison DesignGroup編譯器對這兩種策略都支持。 2.編譯器如何能夠只實例化程序中用到的member functions? 解決辦法之一就是,根本忽略這項要求,把一個已經(jīng)實例化的class的所有member functions都產(chǎn)生出來。Borland就是這么做的——雖然它也提供#pragmas讓你壓制(或?qū)嵗┨囟▽嵗A硪环N策略就是模擬鏈接操作,檢測看看哪一個函數(shù)真正需要,然后只為它(們)產(chǎn)生實例。cfront就是這么做的。Edison DesignGroup編譯器對這兩種策略都支持。 3.編譯器如何阻止member definitions在多個.o文件中都被實例化呢? 解決辦法之一就是產(chǎn)生多個實例,然后從鏈接器中提供支持,只留下其中一個實例,其余都忽略。另一個辦法就是由使用者來導(dǎo)引“模擬鏈接階段”的實例化策略,決定哪些實例(instances)才是所需求的。 目前,不論是編譯時期還是鏈接時期的實例化(instantiation)策略,均存在以下弱點:當template實例被產(chǎn)生出來時,有時候會大量增加編譯時間。很顯然,這將是template functions第一次實例化時的必要條件。然而當那些函數(shù)被非必要地再次實例化,或是當“決定那些函數(shù)是否需要再實例化”所花的代價太大時,編譯器的表現(xiàn)令人失望! C++支持template的原始意圖可以想見是一個由使用者導(dǎo)引的自動實例化機制(use—directed automatic instantiation mechanism),既不需要使用者的介入,也不需要相同文件有多次的實例化行為。但是這已被證明是非常難以達成的任務(wù),比任何人此刻所能想象的還要難(請參考[S7ROUP94])。ptlink,隨著cfront 3.0版所附的原始實例化工具,提供了一個由使用者驅(qū)動的自動實例化機制(use—drivenautomatic instantiation mechanism),但它實在太復(fù)雜了,即使是久經(jīng)世故的人也沒法一下子了解。
編輯推薦
《深度探索C++對象模型》重點探索了“面向?qū)ο蟪绦蛩С值腃++對象模型”下的程序行為,對于“面向?qū)ο笮再|(zhì)的基礎(chǔ)實現(xiàn)技術(shù)”以及“各種性質(zhì)背后的隱含利益交換”提供了一個清楚的認識,檢驗了由程序變形所帶來的效率沖擊,提供了豐富的程序范例、圖片,以及面向?qū)ο笥^念和底層對象模型之間的效率測量。
圖書封面
圖書標簽Tags
無
評論、評分、閱讀與下載