海報:
繼Effective C++之後,Scott Meyers於1996推齣這本“續集”。條款變得比較少,頁數倒是多瞭一些,原因是這次選材比“第一集”更高階,尤其是第5章。Meyers將此章命名為技術(techniques),並明白告訴你,其中都是一些patterns,例如virtual constructors,smart pointers,reference counting,proxy classes,double dispatching……這一章的每個條款篇幅都達15~30 頁之多,實在讓人有“山重水復疑無路,柳暗花明又一村”之嘆。
雖然齣版年代稍嫌久遠,但本書並沒有第2版,原因是當其齣版之時(1996),C++ Standard已經幾乎定案,《More Effective C++:35個改善編程與設計的有效方法(中文版)》即依當時的標準草案而寫,其與現今的C++ 標準規範幾乎相同。而且可能變化的幾個彈性之處,Meyers也都有所說明與提示。讀者可以登錄作者提供的網址,看看上下兩集的勘誤與討論(數量之多,令人驚恐。幸好多是技術討論或文字斟酌,並沒有什麼重大誤失)。
讀者對象:程序設計學習者和在職開發人員。
Scott Meyers,世界的C++軟件開發技術專業之一。他是兩本暢銷書EffectiveC++和More Effective C++的作者,以前曾經是C++ Report的專欄作傢。他經常為C/C++ UsersJournal和Dr. Dobb's Journal撰稿,也為全球範圍內的客戶做谘詢活動。他也是Advisory Boards forNumeriX LLC和InfoCruiser公司的成員。他擁有Brown University的計算機科學博士學位。
侯捷,集計算機技術讀物之著、澤、評於一身,足《多態與虛擬》和《STL源碼剖析》的作者,《Run!Pc》雜誌、《程序員》雜誌的知名專欄作傢,也是極其號召力的大學教師與研討會講師。他於1989年獲得中國颱灣清華大學動機係碩士學位。
★《Effective c++》(ScottMeyers一本書)的榮耀:“對於任何渴望在中階或高階層麵精通c++的人,我慎重推薦《Effective c++》
——(The C/C++User's Journal)
導讀(Introduction)
基礎議題(Basics)
條款1:仔細區彆 pointers 和 references
Distinguish between pointers and references.
條款2:最好使用 C++ 轉型操作符
Prefer C++-style casts.
條款3:絕對不要以多態(polymorphically)方式處理數組
Never treat arrays polymorphically.
條款4:非必要不提供 default constructor
Avoid gratuitous default constructors.
操作符(Operators)
條款5:對定製的"類型轉換函數"保持警覺
Be wary of user-defined conversion functions.
條款6:區彆 increment/decrement 操作符的前置(prefix)和後置(postfix)形式
Distinguish between prefix and postfix forms of increment and decrement operators.
條款7:韆萬不要重載&&,||和, 操作符
Never overload &&, ||, or,.
條款8:瞭解各種不同意義的 new 和 delete
Understand the different meanings of new and delete
異常(Exceptions)
條款9:利用 destructors 避免泄漏資源
Use destructors to prevent resource leaks.
條款10:在 constructors 內阻止資源泄漏(resource leak)
Prevent resource leaks in constructors.
條款11:禁止異常(exceptions)流齣 destructors 之外
Prevent exceptions from leaving destructors.
條款12:瞭解"拋齣一個 exception"與"傳遞一個參數"或"調用一個虛函數"之間的差異
Understand how throwing an exception differs from passing a parameter or calling a virtual function.
條款13:以 by reference 方式捕捉 exceptions
Catch exceptions by reference.
條款14:明智運用 exception specifications
Use exception specifications judiciously.
條款15:瞭解異常處理(exception handling)的成本
Understand the costs of exception handling.
效率(Efficiency)
條款16:謹記 80-20 法則
Remember the 80-20 rule.
條款17:考慮使用 lazy evaluation(緩式評估)
Consider using lazy evaluation.
條款18:分期攤還預期的計算成本
Amortize the cost of expected computations.
條款19:瞭解臨時對象的來源
Understand the origin of temporary objects.
條款20:協助完成"返迴值優化(RVO)"
Facilitate the return value optimization.
條款21:利用重載技術(overload)避免隱式類型轉換(implict type conversions)
Overload to avoid implicit type conversions.
條款22:考慮以操作符復閤形式(op=)取代其獨身形式(op)
Consider using op= instead of stand-alone op.
條款23:考慮使用其他程序庫
Consider alternative libraries.
條款24:瞭解 virtual functions、multiple inheritance、virtual base classes、runtime type identification 的成本
Understand the costs of virtual functions, multiple inheritance,virtual base classes, and RTTI.
技術(Techniques, Idioms, Patterns)
條款25:將 constructor 和 non-member functions 虛化
Virtualizing constructors and non-member functions.
條款26:限製某個 class 所能産生的對象數量
Limiting the number of objects of a class.
條款27:要求(或禁止)對象産生於 heap 之中
Requiring or prohibiting heap-based objects.
條款28:Smart Pointers(智能指針)
條款29:Reference counting(引用計數)
條款30:Proxy classes(替身類、代理類)
條款31:讓函數根據一個以上的對象類型來決定如何虛化
Making functions virtual with respect to more than one object.
雜項討論(Miscellany)
條款32:在未來時態下發展程序
Program in the future tense.
條款33:將非尾端類(non-leaf classes)設計為抽象類(abstract classes)
Make non-leaf classes abstract.
條款34:如何在同一個程序中結閤 C++ 和 C
Understand how to combine C++ and C in the same program.
條款35:讓自己習慣於標準 C++ 語言
Familiarize yourself with the language standard.
推薦讀物
auto_ptr 實現代碼
索引(一)(General Index)
索引(二)(Index of Example Classes,Functions,and Templtes)
我們終於抵達瞭最後一站。本章內含難以歸類的準則。一開始的兩個條款討論C++軟件開發過程如何設計齣能夠容納日後變化的係統。是的,麵嚮對象方法應用於係統構造的一個強大力量就是,它支持日後的變化。這些條款描述瞭一些特定步驟,你可以用來強化你的軟件工事,抵抗這個拒絕停滯的世界帶來的刀戟箭弩。
接下來我將驗證如何在同一個程序中結閤C和C++。這個需求導緻語言上的額外考慮,不過C++畢竟生存於真實世界之中,有時候我們必須麵對這樣的問題。
最後,我把“C++標準規格”公開之後的各項語言變化做一番摘要整理。在此特彆涵蓋標準程序庫中翻天覆地的大變化(亦請參考條款E49)。如果你未曾密切跟隨標準化的腳步,對於這些變化可能會有很大的驚喜。是的,標準程序庫中有許多讓人愉悅的東西。條款32:在未來時態下發展程序世事永遠在變。身為軟件開發人員,我們可能不是知道得很多,但我們確切知道世事永遠在變。我們不一定知道改變的是什麼,改變如何到來,改變何時發生,或為什麼會發生,但我們真的知道:事情會改變。
好的軟件對於變化有良好的適應能力。好的軟件可以容納新的性質,可以移植到新的平颱,可以適應新的需求,可以掌握新的輸入。軟件具備如此的彈性、健壯性、可信賴度,並非是天上掉下來的禮物,而是那些“即使麵對今天的束縛,仍然對明天可能的需求念茲在茲”的設計者和實現者共同努力的結果。
……
C++ 是一門難學易用的語言!
C++ 的難學,不僅在其廣博的語法、語法背後的語義、語義背後的深層思維、深層思維背後的對象模型;C++ 的難學,還在於它提供瞭4種不同(相輔相成)的編程思維模型:procedural-based,object-based,object-oriented,generic paradigm。
世上沒有白吃的午餐。又要有效率,又要有彈性,又要前瞻望遠,又要迴溯相容,又要能治大國,又要能烹小鮮,學習起來當然就不可能太簡單。
在如此龐大復雜的機製下,萬韆使用者前赴後繼的動力是:一旦學成,妙用無窮。
C++ 相關書籍之多,車載鬥量,如天上繁星,如過江之鯽。廣博如四庫全書者有之(The C++ Programming Language、C++ Primer),深奧如重山復水者有之(The Annotated C++ Reference Manual, Inside the C++ Object Model),細說曆史者有之(The Design and Evolution of C++, Ruminations on C++),獨沽一味者有之(Polymorphism in C++, Genericity in C++),獨樹一幟者有之(Design Patterns, Large Scale C++ Software Design, C++ FAQs),程序庫大全有之(The C++ Standard Library),另闢蹊徑者有之(Generic Programming and the STL),工程經驗之纍積亦有之(Effective C++, More Effective C++, Exceptional C++)。
這其中,“工程經驗之纍積”對已具 C++ 相當基礎的程序員而言,有著緻命的吸引力與立竿見影的幫助。Scott Meyers 的Effective C++ 和 More Effective C++ 是此類佼佼,Herb Sutter 的 Exceptional C++ 則是後起之秀。
這類書籍的一個共同特色是輕薄短小,並且高密度地納入作者浸淫於 C++/OOP 領域多年而廣泛的經驗。它們不但開擴讀者的視野,也為讀者提供各種 C++/OOP 常見問題或易犯錯誤的解決模型。某些小範圍主題諸如“在base classes 中使用 virtual destructor”、“令operator= 傳迴 *this 的 reference”,可能在百科型 C++ 語言書籍中亦曾概略提過,但此類書籍以深度探索的方式,讓我們瞭解問題背後的成因、最佳的解法,以及其他可能的牽扯。至於大範圍主題,例如smart pointers,reference counting,proxy classes,double dispatching,基本上已屬design patterns的層級!
這些都是經驗的纍積和心血的結晶!
我很高興將以下兩本優秀書籍,規劃為一個係列,以鄭重的形式呈現給您:
1.Effective C++ 2/e, by Scott Meyers, AW 1998
2.More Effective C++, by Scott Meyers, AW 1996
本書不但與英文版頁頁對譯,保留索引,並加上譯注、交叉索引 、讀者服務 。
這套書將對於您的程序設計生涯帶來重大幫助。翻譯這套書籍的過程中,我感覺來自技術體會上的極大快樂。我祈盼(並相信)您在閱讀此書時擁有同樣的心情。
評價一: 初次翻閱這本書,就立刻被其精煉的語言和直擊要害的觀點所吸引。作者並沒有止步於C++的語法和基礎概念,而是深入探討瞭如何利用C++的強大特性來構建更健壯、更高效的係統。書中提齣的那些“有效方法”,並不是簡單的技巧堆砌,而是蘊含著深刻的設計哲學和麵嚮對象編程的精髓。我尤其欣賞作者在闡述每一個觀點時,都輔以大量簡潔而富有啓發性的代碼示例,這使得抽象的概念變得觸手可及。通過這些示例,我能清晰地看到“正確”的做法與“錯誤”的做法之間的巨大差異,以及前者如何帶來性能的提升和維護的便捷。例如,關於資源管理的部分,作者的講解讓我豁然開朗,原本那些我常常頭疼的內存泄露和對象生命周期問題,在理解瞭RAII(Resource Acquisition Is Initialization)的精妙之後,變得迎刃而解。這本書給我最大的感受是,它教會瞭我如何“像C++大師一樣思考”,如何去設計那些不僅能工作,而且能“優雅地”工作,並經得起時間考驗的代碼。
评分評價二: 這本書簡直是C++進階的“葵花寶典”!裏麵的每一個“方法”都像一把鋒利的解剖刀,剖析瞭C++語言的深層機製,並給齣瞭切實可行的改進方案。我記得在接觸這本書之前,我總是覺得C++的某些特性用起來很彆扭,效率也不夠理想,但這本書的齣現,徹底改變瞭我的認知。作者以一種非常嚴謹的態度,從多個維度去審視C++的編程實踐,從類型安全、內存管理到麵嚮對象設計的模式,無一不包。特彆是在討論模闆元編程和泛型編程的部分,作者的講解邏輯清晰,層層遞進,讓我這個之前對這方麵有些畏懼的開發者,也逐漸建立瞭信心,並嘗試將其應用到實際項目中。書中的許多建議,比如如何有效地使用const、如何進行高效的對象拷貝和賦值,都極大地提升瞭我編寫代碼的效率和質量。它不僅僅是一本技術書籍,更是一本能夠塑造開發者思維方式的指南,讓我學會瞭如何在紛繁復雜的C++世界中,找到那條通往更優解的道路。
评分評價三: 《More Effective C++》這本書,對我而言,是一次顛覆性的學習體驗。它所提供的“35個有效方法”,與其說是方法,不如說是對C++編程藝術的精妙闡釋。作者沒有選擇簡單羅列語法規則,而是深入剖析瞭C++語言在實際應用中可能遇到的挑戰,並提供瞭一係列經過實踐檢驗的解決方案。我印象最深的是關於“編程慣用法”的部分,作者通過生動形象的比喻和詳實的對比,揭示瞭許多程序員在不經意間會陷入的設計誤區。讀完這些,我纔真正理解到,為何有些代碼能夠長時間穩定運行,而有些則會頻繁齣現難以追蹤的bug。書中的每一個案例都經過精心設計,它們不僅僅是為瞭說明一個觀點,更是為瞭引導讀者去思考,去探索更深層次的原理。它教會瞭我如何寫齣“可維護性更強”的代碼,如何讓我的程序在麵對未來的需求變更時,依然保持良好的彈性。這對於任何一個嚴肅的C++開發者來說,都是一筆寶貴的財富。
评分引言: 在軟件開發領域,追求卓越的代碼質量和優雅的設計理念是永恒的主題。一本優秀的編程書籍,如同航海中的燈塔,能夠指引開發者穿越迷霧,抵達更廣闊的知識海洋。《More Effective C++:35個改善編程與設計的有效方法(中文版)》這本書,便是這樣一座知識的燈塔,它以其深刻的洞察力和實用的建議,為無數C++開發者提供瞭寶貴的啓示。本書並非泛泛而談,而是聚焦於C++語言特有的強大之處,以及如何在實際項目中充分發揮這些特性,寫齣既高效又易於維護的代碼。它所提齣的35個方法,每一個都經過深思熟慮,旨在解決開發者在編程和設計過程中普遍遇到的痛點,幫助我們避開常見的陷阱,邁嚮更高的技術境界。
评分評價四: 如果說《Effective C++》是C++入門的基石,那麼《More Effective C++》則為我們搭建瞭通往精通的橋梁。這本書的深度和廣度都令人驚嘆,它所包含的35個方法,每一個都足以引發深入的思考和實踐。我特彆喜歡作者在講解過程中所展現齣的那種嚴謹的學術態度和豐富的實踐經驗。他不僅告訴你“怎麼做”,更告訴你“為什麼這麼做”,以及“不這麼做的後果”。這種知其然,更知其所以然的學習方式,讓我對C++這門語言有瞭更深刻的理解。書中的很多章節,都讓我反復閱讀,每次都能有新的收獲。例如,關於異常安全的章節,作者的講解細緻入微,讓我充分認識到在復雜的係統中,如何確保程序的健壯性。這本書的語言風格非常流暢,即使是討論一些比較晦澀的技術問題,也能被講解得清晰易懂。它不僅僅是一本技術手冊,更是一本能夠提升開發者思維能力和解決問題能力的“武功秘籍”。
评分看了一下,很专业,常年写代码的人看这个很有帮助
评分不错哈,只是我地址写错了,耽误了就好
评分不错,都是候捷经典之作,必不可少的一本C++书!
评分书不错,包装没问题,这下值得研究研究了看看
评分比想象中要薄一点
评分屯书的时候到了 大家加油 感谢京东
评分京东读书节买的,价格太实惠,有书看了!
评分经典图书,思路不一样,读起来很顺畅也有趣。不是大部头,没太大压力。
评分感觉不错 好好学习吧 之前没深入接触过c+o
本站所有內容均為互聯網搜索引擎提供的公開搜索信息,本站不存儲任何數據與內容,任何內容與數據均與本站無關,如有需要請聯繫相關搜索引擎包括但不限於百度,google,bing,sogou 等
© 2025 tushu.tinynews.org All Rights Reserved. 求知書站 版权所有