出版時(shí)間:2001-9 出版社:華中科技大學(xué)出版社 作者:[美] Scott Meyers 頁數(shù):259 譯者:侯捷
Tag標(biāo)簽:無
內(nèi)容概要
您手上這本書,是世界頂級(jí)C++大師Scott Meyers成名之作的第二版。其第一版誕生于1991年。在國際上,本書所引起的反響之大,波及整個(gè)計(jì)算機(jī)技術(shù)出版領(lǐng)域,余音至今未絕。幾乎在所有C++書籍的推薦名單上,本書都會(huì)位于前三名。作者高超的技術(shù)把握力,獨(dú)特的視角、詼諧輕松的寫作風(fēng)格、獨(dú)具匠心的內(nèi)容組織,都受到極大的推崇和仿效。甚至連本書簡潔明快的命名風(fēng)格,也有著一種特殊的號(hào)召力,我可以輕易列舉出一大堆類似名字,比如Meyers本人的More Effective C++和Effective STL,Don Box的Effective COM,Stan Lippman主編的Efficient C++系列,Herb Sutter的Exceptional C++等等。要知道,這可不是出版社的有意安排,而且上面這些作者,同樣是各自領(lǐng)域里的絕頂大師,決非人云亦云、欺世盜名之輩。這種奇特的現(xiàn)象,只能解釋為人們對(duì)這本書衷心的贊美和推崇?! ????然而這樣一本擲地有聲的C++世界名著,不僅遲遲未能出版簡體中文版,而且在國內(nèi)其聲譽(yù)似乎也并不顯赫??梢哉f在一年之前,甚至很少有C++的學(xué)習(xí)者聽說過這本書,這實(shí)在是一種遺憾。今天,在很多人的辛勤努力之下,這本書終于能夠展現(xiàn)在我們的面前,對(duì)于真正的C++程序員來說,這確實(shí)是一件值得彈冠相慶的事。 ???我是一名普通的C++愛好者,因?yàn)闄C(jī)緣巧合,有幸參與了這本書的繁簡轉(zhuǎn)譯工作,這使我能夠比較早地看到本書的原版和繁體中文版。在這里我必須表達(dá)對(duì)本書中文譯者、臺(tái)灣著名技術(shù)作家侯捷先生的敬意和感謝,因?yàn)樵谖铱磥恚@本書的中文版在質(zhì)量上較其英文版兄長分毫不差,任何人都知道,達(dá)到這一點(diǎn)是多么的困難。侯先生以其深厚的技術(shù)功底、卓越的語言能力和嚴(yán)謹(jǐn)細(xì)致的治學(xué)態(tài)度,為我們跨越了語言隔閡所帶來的理解障礙,完整而生動(dòng)地將原書的內(nèi)容與精神表達(dá)無遺,更令人欽佩的是,中文版的行文風(fēng)格與原文也達(dá)到了高度的統(tǒng)一,可謂神形兼?zhèn)?,?shí)在令人贊嘆!因此我非常樂意向大家推薦這本書,相信它會(huì)在帶給您帶給你技術(shù)享受的同時(shí),也帶給您閱讀的享受?! ????曾經(jīng)在網(wǎng)絡(luò)討論組中間看到這樣的說法,C++程序員可以分成兩類,讀過Effective C++的和沒讀過的。或許有點(diǎn)夸張了,但無論如何,當(dāng)您擁有這本書之后,就獲得了迅速提升自己C++功力的一個(gè)契機(jī)。這本書不是讀完一遍就可以束之高閣的快餐讀物,也不是能夠立刻解決手邊問題的參考手冊(cè),而是需要您去反復(fù)閱讀體會(huì),極力融入自己思想之中,融入自己每一次敲擊鍵盤的動(dòng)作之中。C++是真正程序員的語言,背后有著精深的思想與無以倫比的表達(dá)能力,這使得它具有類似宗教般的魅力。希望這本書能夠幫助您跨越C++的重重險(xiǎn)阻,領(lǐng)略高處才有的壯美,做一個(gè)成功而快樂的C++程序員。
書籍目錄
譯序(侯捷)v目錄(Contents) vii前言(Preface)xiii致謝(Acknowledgments. 中文版略)xvii導(dǎo)讀(Introduction)改變舊有的C習(xí)慣(Shifting from C to C++)條款1:盡量以 const 和 inline 取代 #definePrefer const and inline to #define.條款2:盡量以 取代Prefer to .條款3:盡量以 new 和 delete 取代 malloc() 和 free()Prefer new and delete to malloc and free.條款4:盡量使用 C++ 風(fēng)格的注釋形式Prefer C++-style comments.內(nèi)存管理(Memory Management)條款5:使用相同形式的 new 和 deleteUse the same form in corresponding uses of new and delete.條款6:記得在 destructor 中以delete 對(duì)付 pointer membersUse delete on pointer members in destructors.條款7:為內(nèi)存不足的狀況預(yù)做準(zhǔn)備Be prepared for out-of-memory conditions.條款8:撰寫 operator new 和 operator delete 時(shí)應(yīng)遵行公約Adhere to convention when writing operator new and operator delete.條款9:避免遮掩了 new 的正規(guī)形式Avoid hiding the “normal” form of new.條款10:如果你寫了一個(gè)operator new,請(qǐng)對(duì)應(yīng)也寫一個(gè)operator deleteWrite operator delete if you write operator new.構(gòu)造函數(shù)、析構(gòu)函數(shù)和Assignment 運(yùn)算符Constructors, Destructors, and Assignment Operators條款11:如果classes內(nèi)動(dòng)態(tài)配置有內(nèi)存,請(qǐng)為此 class 宣告一個(gè) copy constructor 和一個(gè) assignment 運(yùn)算符Declare a copy constructor and an assignment operatorfor classes with dynamically allocated memory.條款12:在 constructor 中盡量以 initialization 取代 assignmentPrefer initialization to assignment in constructors.條款13:Initialization list 中的 members 初始化排列次序應(yīng)該和其在 class 內(nèi)的聲明次序相同List members in an initialization list in the orderin which they are declared.條款14:總是讓 base class 擁有 virtual destructorMake sure base classes have virtual destructors.條款15:令 operator= 傳回“*this 的 reference”Have operator= return a reference to *this.條款16:在 operator= 中為所有的 data members 賦予內(nèi)容Assign to all data members in operator=.條款17:在 operator= 中檢查是否“自己賦值給自己”Check for assignment to self in operator=.類與函數(shù)之設(shè)計(jì)和聲明Classes and Functions: Design and Declaration條款18:努力讓接口完滿且最小化Strive for class interfaces that are complete and minimal.條款19:區(qū)分member functions, non-member functions和friend functions三者Differentiate among member functions, non-member functions,and friend functions.條款20:避免將 data members 放在公開接口中Avoid data members in the public interface.條款21:盡可能使用 constUse const whenever possible.條款22:盡量使用 pass-by-reference(傳址),少用 pass-by-value(傳值)Prefer pass-by-reference to pass-by-value.條款23:當(dāng)你必須傳回object 時(shí),不要嘗試傳回 referenceDon't try to return a reference when you must return an object.條款24:在函數(shù)重載(function overloading)和參數(shù)缺省化(parameter defaulting)之間,謹(jǐn)慎抉擇Choose carefully between function overloadingand parameter defaulting.條款25:避免對(duì)指針型別和數(shù)值型別進(jìn)行重載Avoid overloading on a pointer and a numerical type.條款26:防衛(wèi)潛伏的 ambiguity(模棱兩可)狀態(tài)Guard against potential ambiguity.條款27:如果不想使用編譯器暗自產(chǎn)生的 member functions,就應(yīng)該明白拒絕它Explicitly disallow use of implicitly generated member functionsyou don't want.條款28:嘗試切割 global namespace(全域命名空間)Partition the global namespace.類與函數(shù)之實(shí)現(xiàn)Classes and Functions: Implementation條款29:避免傳回內(nèi)部數(shù)據(jù)的 handlesAvoid returning “handles” to internal data.條款30:避免寫出member function,傳回一個(gè) non-const pointer 或reference 并以之指向較低存取層級(jí)的 membersAvoid member functions that return non-const pointers orreferences to members less accessible than themselves.條款31:千萬不要傳回“函數(shù)內(nèi) local 對(duì)象的 reference”,或是“函數(shù)內(nèi)以 new 獲得的指針?biāo)傅膶?duì)象”Never return a reference to a local object or toa dereferenced pointer initialized by new within the function.條款32:盡可能延緩變量定義式的出現(xiàn)Postpone variable definitions as long as possible.條款33:明智地運(yùn)用 inliningUse inlining judiciously.條款34:將文件之間的編譯依賴關(guān)系(compilation dependencies)降至最低Minimize compilation dependencies between files.繼承機(jī)制與面向?qū)ο笤O(shè)計(jì)Inheritance and Object-Oriented Design條款35:確定你的 public inheritance 模塑出 “isa” 的關(guān)系Make sure public inheritance models “isa.”條款36:區(qū)分“接口繼承(interface inheritance)”和“實(shí)現(xiàn)繼承(implementation inheritance)”Differentiate between inheritance of interface andinheritance of implementation.條款37:絕對(duì)不要重新定義一個(gè)繼承而來的非虛擬函數(shù)Never redefine an inherited nonvirtual function.條款38:絕對(duì)不要重新定義一個(gè)繼承而來的缺省參數(shù)值Never redefine an inherited default parameter value.條款39:避免在繼承體系中做 cast down(向下轉(zhuǎn)型)的動(dòng)作Avoid casts down the inheritance hierarchy.條款40:通過 layering(分層技術(shù))來模塑 has-a 或is-implemented-in-terms-of 的關(guān)系Model “has-a” or “is-implemented-in-terms-of” through layering.條款41:區(qū)分 inheritance 和 templatesDifferentiate between inheritance and templates.條款42:明智地運(yùn)用 private inheritance(私有繼承)Use private inheritance judiciously.條款43:明智地運(yùn)用多繼承(multiple inheritance,MI)Use multiple inheritance judiciously.條款44:說出你的意思并了解你所說的每一句話Say what you mean; understand what you're saying.雜項(xiàng)討論(Miscellany)條款45:知道 C++(編譯器)默默為我們完成和調(diào)用哪些函數(shù)Know what functions C++ silently writes and calls.條款46:寧愿編譯和連接時(shí)出錯(cuò),也不要執(zhí)行時(shí)才錯(cuò)Prefer compile-time and link-time errors to runtime errors.Ensure that non-local static objects are initializedbefore they're used.條款48:不要對(duì)編譯器的警告訊息視而不見Pay attention to compiler warnings.條款49:盡量讓自己熟悉 C++ 標(biāo)準(zhǔn)程序庫Familiarize yourself with the standard library.條款50:加強(qiáng)自己對(duì) C++ 的了解Improve your understanding of C++
媒體關(guān)注與評(píng)論
本書的50條準(zhǔn)則,每一條都扼要說明了一個(gè)可讓你寫出更好的C++ 程序代碼的方法,并以特別設(shè)計(jì)過的例子詳加討論。在些新版中,Meyers重新檢驗(yàn)了每一準(zhǔn)則,并特別注意兼容于C++ 標(biāo)準(zhǔn)規(guī)格與現(xiàn)行編譯器技術(shù),及融入軟件界對(duì)C++ 運(yùn)用之最新觀察結(jié)果。
編輯推薦
我是一名普通的C++愛好者,因?yàn)闄C(jī)緣巧合,有幸參與了這《Effective C++中文版》的繁簡轉(zhuǎn)譯工作,這使我能夠比較早地看到《Effective C++中文版》的原版和繁體中文版。在這里我必須表達(dá)對(duì)《Effective C++中文版》中文譯者、臺(tái)灣著名技術(shù)作家侯捷先生的敬意和感謝,因?yàn)樵谖铱磥?,這《Effective C++中文版》的中文版在質(zhì)量上較其英文版兄長分毫不差,任何人都知道,達(dá)到這一點(diǎn)是多么的困難。侯先生以其深厚的技術(shù)功底、卓越的語言能力和嚴(yán)謹(jǐn)細(xì)致的治學(xué)態(tài)度,為我們跨越了語言隔閡所帶來的理解障礙,完整而生動(dòng)地將原書的內(nèi)容與精神表達(dá)無遺,更令人欽佩的是,中文版的行文風(fēng)格與原文也達(dá)到了高度的統(tǒng)一,可謂神形兼?zhèn)?,?shí)在令人贊嘆!因此我非常樂意向大家推薦這《Effective C++中文版》,相信它會(huì)在帶給您帶給你技術(shù)享受的同時(shí),也帶給您閱讀的享受。 曾經(jīng)在網(wǎng)絡(luò)討論組中間看到這樣的說法,C++程序員可以分成兩類,讀過Effective C++的和沒讀過的。或許有點(diǎn)夸張了,但無論如何,當(dāng)您擁有這《Effective C++中文版》之后,就獲得了迅速提升自己C++功力的一個(gè)契機(jī)。這《Effective C++中文版》不是讀完一遍就可以束之高閣的快餐讀物,也不是能夠立刻解決手邊問題的參考手冊(cè),而是需要您去反復(fù)閱讀體會(huì),極力融入自己思想之中,融入自己每一次敲擊鍵盤的動(dòng)作之中。C++是真正程序員的語言,背后有著精深的思想與無以倫比的表達(dá)能力,這使得它具有類似宗教般的魅力。希望這《Effective C++中文版》能夠幫助您跨越C++的重重險(xiǎn)阻,領(lǐng)略高處才有的壯美,做一個(gè)成功而快樂的C++程序員。
圖書封面
圖書標(biāo)簽Tags
無
評(píng)論、評(píng)分、閱讀與下載