首頁  >  文章  >  後端開發  >  C++程式設計之四書五經

C++程式設計之四書五經

黄舟
黄舟原創
2017-02-06 14:12:571200瀏覽

C++是一門廣泛用於工業軟體研發的大型語言。它本身的複雜性和解決現實問題的能力,使其極具學術研究價值和工業價值。和C語言一樣,C++已經在許多重要的領域大獲成功。


然而,一個不可否認的現實是,在低階程式設計領域,C++擠壓著C同時也在承受C的強烈反彈,而在高階程式設計領域,Java和C#正在不斷蠶食著C++的領土。也許C++與C合為一體永遠都是一個夢想,也許Java和C#的狂潮終將迫使C++回歸本位— 回到它有著根本性優勢的開發領域:低階系統程式設計、高階大規模高效能應用設計、嵌入式程式設計以及數值科學計算等。果真如此,我認為這未嘗不是好事。


C++吸引如此之多的智力投入,以至於這個領域的優秀作品,包括重量級的軟體產品、程式庫以及書籍等,數不勝數。文題「C++程式設計之四書五經」一個不太嚴格的意思是:C++程式設計之四書 ⅹ 五經。是的,在本文(及其下篇)中,我將分門別類別推薦20多本C++好書,你可以依照自己的需求選讀。


TCPL和D&E


TCPL和D&E分別是《The C++ Programming Language》和《The Design and Evolution of C++》的簡稱,出自均之手。我將它們單列出來,首先是因為Bjarne是C++語言的創建者,然後是因為比「首先」那個原因更重要的原因:這兩本書是C++領域毋庸置疑的傑作。說它們是C++語言聖經,並不為過。


Bjarne Stroustrup, The C++ Programming Language (Special 3rd Edition)


《C++程式設計語言(特別版)》,機械工業出版社


《C++程式設計語言(特別版)》,機械工業出版社

)(英文影印版)》,高等教育出版社


迄今為止,TCPL是除了C++標準文獻之外最權威的C++參考手冊。和大多數人的看法不大一樣,我認為Bjarne的文字語言並不遜色於他所創造的程式語言,至少我喜歡這種學院氣息濃厚的作品。本書對C++語言的描述輪廓鮮明、直截了當。它從C++語言創建者的角度來觀察C++,這是任何別的作者和書籍做不到的 — 沒有任何人比Bjarne自己更清楚該怎麼來使用C++。


這是一本嚴肅的著作,以中、高級C++開發人員為目標讀者。如果你是有經驗的C++程式設計師,需要了解更本質的C++知識,本書正是為你而寫。它不是那種讓你看了會不斷竊喜的小書,需要用心體會,反覆咀嚼。在閱讀過程中,請特別留意Bjarne先生強調了什麼,又對什麼一語帶過。我個人比較喜歡這本書的第四部分“使用C++做設計”,這樣的內容在類似的程式設計語言書中很難看到 — 我什至認為Bjarne應該將這部分獨立出來單獨寫一本書。


Bjarne Stroustrup, The Design and Evolution of C++


《C++語言的設計與演化》,機械工業出版社


版機械工業出版社


D&E是一本關於C++語言設計原理、設計決策和設計哲學的專著。它清晰地回答了C++為什麼會成為今天這個樣子而沒有變成另一種語言。身為C++語言的創建者,Bjarne淋漓盡致地展現了他獨到而深刻的見解。除了廣受讚譽的語言特性外,Bjarne沒有迴避那些引起爭議的甚至被拒絕的C++特性,他一一給出了邏輯嚴密、令人信服的解釋。內容涵蓋C++的史前時代、帶類的C、C++的設計規則、標準化、庫、內存管理、多重繼承、模板等,對包括異常機制、運行時類型信息和名字空間在內的重要的新特性都分別進行了深入探討。每位C++程式設計師都應該可以從Bjarne的詮釋中加深對手中這門語言的認識。


需要再次提醒的是,這兩本書知識濃縮,資訊量極大,請不要錯過Bjarne每一句看似漫不經意的話。


入門教程


學習任何一門語言都需要一個從入門到精通、從新手到高手循序漸進的過程。不過,對於一個所謂的新手而言,究竟是一個完完全全的新手,還是一個熟悉某種別的語言的“新手”,甚至是在某種語言程序設計領域已經頗有建樹的高手,很難一概而論?不同的C++新手需要不同的入門書。


Andrew Koenig, Barbara E. Moo, Accelerated C++: Practical Programming by Example++


《Accelerated C++


《Accelerated C++🎜🎜🎜🎜🎜《Accelerated 中文版》,中國電力出版社

和市面上大多數C++教程不同,本書不是從「C++中的C」開始講解,而是始於地道的C++特性。從一開始就使用標準函式庫來寫程序,隨著敘述的逐漸深入,又一一解釋這些標準函式庫元件所依賴的基礎概念。另外,和其他C++教材不同的是,這本書以實例拉動語言和標準庫的講解,對後兩者的講解是為了給實例程序提供支持,而不是像絕大多數C++教材那樣,例子只是用作示範語言特性和標準函式庫用法的輔助工具。


作者在C++領域的程式設計實踐、教育訓練以及技術寫作方面都是世界一流水準。我喜歡這種大量使用標準函式庫和C++語言原生特性的清新的寫作風格。在這本教材面前,幾乎迄今為止的所有C++教材都黯然失色或顯得過時。儘管這本教材也許對於國內的高校教育來說有些前衛,不過我仍然極力向我的同行推薦。順帶一提,在Bjarne和我最近的一封通信裡,他這樣評價本書:對於有經驗的程式設計師學習C++而言,這本書可能是全世界最好的一本。


Stanley B.Lippman, Josee Lajoie, C++ Primer (3rd Edition)


《C++ Primer (3RD)中文版

讓人誤解。儘管作者聲稱這本書是為C++新手而寫,但無論是它的厚度還是講解的深度都暴露了似乎並非如此。也許說它是一本“從入門到精通”的C++教程會更合適一些。我個人認為它不適合完全不懂C++的初學者 — 在閱讀這本書之前,你至少應該先有那麼一點C或C++的背景知識,或者至少要具有一些其他語言的程式設計經驗。


儘管這本書省略了一些高級C++特性的討論,但仍然可以稱得上是迄今為止最全面的C++學習教程。事實上,如果一名C++初學者能夠紮紮實實地讀完本書並對照《C++ Primer Answer Book》完成全部習題的話,他的水平肯定可以進入職業C++程式設計師的行列。我個人認為,即使你已經擁有了TCPL,這本書仍然有擁有的價值,因為在許多方面它比TCPL來得更詳細、更易懂。


Stanley B. Lippman, Essential C++


《Essential C++中文版》,華中科技大學出版社


影版

影版

版。

可以不太嚴格地認為這本書是《C++ Primer》的精簡版。本書一一講述了C++中最具代表性的主題,包括過程式設計、泛型程式設計、基於物件程式設計、物件導向程式設計、模板程式設計以及例外處理等。 Stanley將門檻調低到「具有其他語言程式設計經驗」的C++新手所能接受的最基本的層次,使他們能夠迅速開始使用C++程式設計而又免於閱讀《C++ Primer》那樣的大部頭。它以實例引導學習,試圖使讀者在最短的時間內掌握C++的精粹。

也許換一個人來概述C++程式設計範式(paradigm)的方方面面需要好幾百頁才能說清楚,但這本小書不可思議地做到了這一點。我個人非常喜歡這種充滿技術、簡潔扼要並且「有話好好說」的書。這本書同樣具有一個明顯的風格:所有程式範例全部採用標準函式庫元件,讓人耳目一新。

以上三本書都不是為了完完全全的程式新手而寫。完整的C++程式設計新手可以閱讀Francis Glassborow的新書(尚未出版):《A Beginners Introduction to Computer Programming : You Can Do It!》。這也是Bjarne的推薦。 Francis Glassborow是ACCU主席,多年來他對幾乎每一本C++經典名著評頭論足,他自己的這一本自然會引起C++社群的極大興趣。

高效、健壯編程

兩年前我在負責一個省級電力調度系統項目時編寫了一個網關程序,它從SCADA系統獲取實時電力信息。通訊介面採用了不常用的資料庫直連方式(這個閘道程式一端連接SQL Server 6.5,另一端連接Oralce 8.1.6)。由於即時測點近萬,每次將全部取樣更新或插入一遍顯然是低效的。我在網關程式裡建了一個記憶體庫,獲取到的資料先在其中進行比較,然後決定是否更新實體資料庫(同時還做了別的更複雜的事情…),從而在效率和資源佔用兩方面達到了預期效果。

這個程式一直運作得很好,但在離開現場之後的某一天,系統管理員打來電話,說大概因為網路故障等原因,有時這個網關程式會崩潰掉— 它自己崩掉也就罷了,問題是它還會把Windows 2000 Advanced Server變成「藍色畫面」!坦白說,我從來沒看過哪個非蓄意的程式有這個「能耐」。由於當時正忙於另外一個大項目,無法去現場調試,最後只有憑經驗對內存庫程式碼小心翼翼地封裝以異常處理程式碼(同時也做了一些別的修改…)。這樣,雖然沒有徹底解決問題,但程序終究不再死得那麼難看了。


在這裡講這麼一段花絮有什麼意思呢(當初為那個可怕的bug朝思暮想時我可不認為這是一個「花絮」)?我想說的是,對於任何軟體而言,離開強健,效率也就無從談起。而對於C++程式設計師來說,也許編寫一個高效的程式並不難,但要編寫一個需要7 ⅹ 24小時持續運行的服務端軟體就不是那麼容易了,需要考慮許多因素,有時這些因素甚至遠遠超出C++語言和開發工具的本身。身為開發實際專案軟體的程式設計師,並非非得自己碰釘子才能累積經驗,只要我們夠虛心,別人的經驗往往都是我們很好的借鏡。有鑑於此,我推薦以下幾本書供你選讀,它們可以讓你從強健和效率兩方面受益(當然了,它們涵蓋的內容遠限於異常處理J)。


Scott Meyers, Effective C++: 50 Specific Ways to Improve Your Programs and Design (2nd Edition)


Scott Meyers, More Effective C++: 35

《Effective C++中文版》,華中科技大學出版社


《More Effective C++中文版》,中國電力出版社


《Effective C++影印版>


如果說《Effective C++》主要討論C++中一些相對基礎的概念和技巧的話,那麼《More Effective C++》則著重探討了包括異常處理在內的一系列高級技術。與前者相比,後者有兩大主要區別:其一,它包含很多時新的標準C++的內容;第二,它討論的主題傾向於“戰略化”而非“戰術化”,並且討論得更深入、更徹底。尤其是對虛析構函數、智慧指標、引用計數以及代理類別(proxy classe)等技術和模式論述的深入程度,讓人很難想像是出現於這樣的一本小書之中。


游刃有餘的技術,高超的寫作技巧,Scott無疑是世界上最優秀的C++技術作家之一。在簡潔、清晰、易讀等方面,這兩本書都卓爾不群。總之,Scott提供的這85個可以改善程式技術和設計思考的方法,都是中、高階C++程式設計師必備的技能。我強烈推薦這兩本書(實際上還有一本,稍後就會看到)。


Herb Sutter, Exceptional C++: 47 Engineering Puzzles, Programming Problems, and Solutions


Herb Sutter、 ceptional C++中文版》,中國電力出版社


《More Exceptional C++中文版》,華中科技大學出版社


你自認為是C++語言專家嗎?讀一讀ISO C++標準委員會秘書長的這兩本書再回答。在這兩本書中,Herb採用了「問答」的方式來引導你學習C++語言特性。對於每一個專題,Herb首先合理地設想出你的疑問和困惑,接著又猜測出你十有八九是錯誤的解答,然後給你以指點並提出最佳解決方案,最後還歸納出解決類似問題的普適性原則。


這兩本書是典型的深究C++語言細節的著作,很薄,但內容密集,遠遠超過Scott的那兩本書,讀起來很費腦筋— 我個人認為它們要比斯科特的書難懂得多。若要研習這薄薄的兩本書所包含的知識,至少要花數月的時間! (在Scott的薦序中,他坦陳不只一次陷入GotW問題的陷阱,你應該知道這代表什麼)對於語言細節的深究有什麼好處呢?儘管在大多數情況下,我們不必關心C++程式碼幕後的動作,然而當我們不得不關心時,這兩本書可以為我們提供很好的線索,因為它們揭示了C++語言中微妙而又至關重要的東西。


Stephen C. Dewhurst, C++ Gotchas: Avoiding Common Problems in Coding and Design


《C++程序設計陷阱》,中國青年出版社

Stephen的理論素養與實務經驗注定這是一本值得一讀的好書。 Stephen曾經是貝爾實驗室中第一批C++使用者。他已經使用C++成功解決了包括編譯器、證券交易、電子商務以及嵌入式系統等領域中的問題。本書匯集了作者來自開發第一線的99條程式設計真知灼見,洞悉它們,你可以避免幾乎所有常見的C++設計和程式設計問題。


我甚至認為,對於C++程式菜鳥而言,閱讀這本書會比閱讀Scott和Herb的書更能輕鬆而立竿見影地獲得更大的提高。我個人很喜歡這本書的寫作風格 — Stephen的許多觀點看似極端卻無可辯駁。當然了,這種自信(以及冷幽默)來自於作者深厚的技術素養,而非自大的偏執。


除了上面推薦的書籍外,Dov Bulka和 David Mayhew合著的《Efficient C++: Performance Programming Techniques》(《提高C++效能的程式設計技術》,清華大學出版社)也值得一看。這本超薄小書聚焦於高效能C++應用程式開發。兩位作者都是IBM軟體專家,都工作於對效能要求極高的系統建置領域,本書是他們的經驗之談。也有人不喜歡這本書,因為它花了不少的篇幅講述和C++無關的東西,我卻恰恰因為這一點而對這本書產生好感,正是這些東西讓我開闊了眼界。


模板和泛型程式設計


模板和基於模板的泛型程式設計無疑是當今發展最活躍的C++程式設計技術。模板的第一個革命性的應用是STL,它將模板技術在泛型容器和演算法領域的運用展現得淋漓盡致,而Boost、Loki等現代程式庫則將模板技術的潛能不斷發揮到極致。在範本和泛型程式設計領域,我推薦以下兩本重量級著作:


David Vandevoorde, Nicolai M. Josuttis, C++ Templates: The Complete Guide

, 》,台灣碁峰資訊股份有限公司

《C++ Templates全覽(簡體版)》,人民郵電出版社

有一種老套的讚美出版社

有一種老套的讚美出版社

有一種老套的讚美出版社

有一種老套的讚美出版社

有一種老套的讚美出版社

有一種老套的讚美出版社

有一種老套的讚美出版社

有一種老套的讚美出版社

有一種老套的讚美出版社的手法看過這本書,你就怎麼怎麼地”,這裡面往往誇張的成分居多。不過,倘若說“沒有看過《C++ Templates: The Complete Guide》,你就不可能精通C++模板程式設計”,那麼這個論點對於世界上絕大多數C++程式設計師來說是成立的。

這本書填補了C++模板書籍領域由來已久的空白。先前,上有《Modern C++ Design》這樣的專注於模板高階程式技術和泛型模式的著作,下有《The C++ Standard Library》這樣的針對特定模板框架和元件的使用指南。然而,如果對模板機制缺乏深入的理解,你就很難「上下」自如。有鑑於此,我向每位渴望透徹理解C++模板技術的朋友推薦這本書。

這本書在內地、台灣各有一個譯本,但出自不同的譯者之手。當你看到這篇文章時,兩個譯本應該都已經上市,對讀者來說當然也就多了一種選擇。侯捷先生個人網站上開放了繁體譯本大部分章節,不妨先睹為快。

🎜🎜🎜Andrei Alexandrescu, Modern C++ Design: Generic Programming and Design Patterns Applied🎜🎜🎜🎜🎜《C++設計新思維:泛型程式設計模式中《應用》🎜🎜🎜《C++設計新思維:泛型程式設計模式中《應用》 C++設計新思維(影印版)》,中國電力出版社🎜🎜🎜🎜🎜你自認為是C++模板程式設計高手嗎?請看過這本書再回答J 這是一本出自天才之手令人敬畏的傑作。泛型模式,無限延伸你的視野,足以挑戰任何一位C++程式設計師的思維極限。 🎜🎜🎜🎜🎜這本書共分為兩大部分,第一部分討論了Loki程式庫採用的基礎技術以及一些高級語言特性,包括基於策略的類設計、模板局部特化、編譯期斷言、Typelist以及小型物件分配技術等。第二部分則著重介紹了Loki中的重要元件和泛型模式技術,包括泛化仿函數(Generalization Functor)、單件(Singleton)、智慧指標、物件工廠(Object Factory)、抽象工廠(Abstract Factory) 、訪客(Visitor)以及多方法(Multimethods)等。每一種技術都讓人大開眼界,嘆為觀止。 🎜🎜🎜🎜🎜在C++的學習方面,過猶不及往往成了不求甚解的藉口。然而,物件導向並非C++的全部,模板和泛型程式設計亦佔半壁江山。對於「嚴肅」的C++程式設計師而言,及時跟進這項早經例證的成功技術,不失為明智之舉。 🎜🎜🎜🎜🎜結語🎜🎜🎜🎜

這些著作是如此大名鼎鼎,也許根本不缺我一個推薦。然而,縱然C++程式設計師隊伍的發展壯大速度不像其他更時髦的語言那麼迅速,新人進總是多於舊人出。除了熱烈歡迎新人,我個人認為到了對C++書籍進行「盤點」的時候了,並且希望這樣的「盤點」有益於有興趣的讀者。請保持耐心和寬厚。在下篇中,我將繼續介紹標準函式庫、網路程式設計以及其他方面的C++好書。有好書相伴,這個冬天不會冷。


C++程式設計之四書五經(下篇)


我在上篇中「盤點」了TCPL和D&E以及入門教學、高效和健壯程式設計、模板和泛型程式設計等方面共十幾本C++好書。冬去春來,讓我們繼續C++書籍精彩之旅J


標準庫


當我還在研究院工作時,與同院另外兩家研究所合作開發過一個大型水利紐調度集成專案.我們三家軟體系統之間都要相互通訊。在調試通訊模組時,細心的客戶(一位好學的系統管理員)發現對於同一通訊規約的解釋程式碼,我的不超過30行,而對方的則超過了150行且很難看懂。這位系統管理員很納悶,我說大家程式設計風格和習慣不一樣,我使用了標準函式庫,而他使用了傳統C程式設計風格以及他所習慣的另外一些技術。


別誤會!我絕無貶低這位合作夥伴的意思。事實上,我對那些真正有著深厚的C程式設計功力的程式設計師常常懷有欽佩之心。畢竟,C++能有今天的成功在很大程度上緣於它深深植根於C。身為C++程式設計師,倘若不熟悉C++中的C,我往往會認為他的基本功是不紮實的,他的技術底氣是不足的。


不過話又說回來,C++是一種多範式(paradigm)程式語言,具體採用哪種程式風格,專業程式設計師應該知道視具體情況而定。身為一個經常需要在現場做即興開發的專案負責人,為了短平快地解決當務之急,我習慣盡量採用現有的函式庫(和組件)。效率(以及強壯)久經驗證的C++標準函式庫已經擺在那兒了,何樂而不用呢?


Nicolai M. Josuttis, The C++ Standard Library: A Tutorial and Reference


《C++標準程式庫:自修教學與參考手冊》,華氏科技大學參考手冊本百科全書式的C++標準函式庫著作,是一本需要一再查閱的參考大全。它在完備性、細緻性以及精確性方面都是無與倫比的。本書詳細介紹了每一標準庫組件的規格和用法,內容涵蓋包括流和本地化在內的整個標準庫而不僅僅是STL。正如本書副標題所示,它首先適合作為教程閱讀,爾後又可用作參考手冊。


淺顯易懂的寫作風格使得這本書非常易讀。如果你希望學習標準庫的用法並盡可能地發揮其潛能,那你必須擁有這本書。正如網路上所言,這本書不僅應該擺在你的書櫥中,更應該放到你的電腦桌上。我向每一位職業C++程式設計師強烈推薦。


Angelika Langer, Klaus Kreft, Standard C++ IOStreams and Locales: Advanced Programmer"s Guide and Reference


標準庫由STL、流和本地化三部分構成。沒有任何一本書比這一本更全面詳盡地討論了流和本地化。 ,我草草翻閱過這本書的中文版,從內容到包裝都給我留下了比較深刻的印象— 不過負面的居多一些。這本書的中譯本,情不自禁,一陣唏噓。電力出版社


讀完Scott 的《Effective C++》和《More Effective C++》的中譯本之後,我一直期待這本書的中文版。和他的夥伴似乎早已完成了這本書的翻譯工作,可惜至今市面上仍不得見。

本書是使用STL的程式設計師必讀之作。在這本書中,Scott向我們講述STL容器和演算法的工作機制以及如何以最佳方式使用它們。和Scott的其他作品一樣,這本書的寫作風格清晰、精確,並且具有極佳的可讀性。看過這本書以後,我想你也許會跟我以及其他C++程式設計師一樣產生這樣的想法:Scott什麼時候會寫出一本「More Effective STL」?


關於STL,我還提醒你留心Matthew H. Austern的《Generic Programming and the STL: Using and Extending the C++ Standard Template Library》(《泛型程式設計與STL》,中國電力程式設計出版社)。這本書散發著濃厚的學院氣息。 Andrew Koenig和Barbara Moo在《Accelerated C++: Practical Programming by Example》一書最後鄭重推薦另外兩本進階好書(除了他們自己的《Ruminations on C++》外),其中一本是TCPL,另外一本就是本書!


網路程式設計


在網路程式設計時代,C++應該扮演著怎樣的角色,讓ACE(Adaptive Communications Environment)來告訴你。


Douglas C. Schmidt, Stephen D. Huston, C++ Network Programming, Volume 1: Mastering Complexity with ACE and Patterns


,Douglas C. Schmidt, Stephen Systematic Reuse with ACE and Frameworks


《C++網路編程,卷1:運用ACE與模式消除複雜性》,華中科技大學出版社


《C++ACE的系統化復用》,電子工業出版社


採用C++進行企業級網路編程,目前ACE(以及這兩本書)是一個值得考慮的選擇。 ACE是一個物件導向、跨平台、開放原始碼的網路程式框架,目標在於建構高效能網路應用和中介軟體。 Douglas是ACE的創辦人,Stephen則已為ACE提供了數年的技術支援和顧問服務,兩位都是ACE社群(是的,ACE的影響和實際應用的程度已經形成了一個社群)的專家。


ACE並不單單被大學和研究所追捧,它已經被成功地應用於世界上成千上萬個商業應用中。在電信、太空、醫藥和財經領域的網路系統中,ACE已經並繼續發揮重要的作用。如果你準備開發高效能通訊系統,你應該考慮考慮這本匯集世界頂尖專家智慧的成果。


除了使用C++物件導向設計技術和模板等高階語言特性外,ACE也運用了大量的模式。 《C++網路程式設計》卷1和卷2並不僅僅教你關於ACE的方方面面,它還會教你模式和通用框架設計等高級技術等。所以,身為中、高階C++程式設計師,即使你很少進行正兒八經的C++網路程式設計,閱讀這兩本書同樣可以從中受益。


是的,並非所有網路應用程式都要使用Web伺服器(以及其他應用程式伺服器)和重量級元件模型,換個思路,它們或許也可以從輕量級的ACE元件中獲益。


雜項


以下這幾本書之所以被列入「雜項」單元,只是因為我沒有考慮出更合適的歸類方法,它們和上面的書籍一樣,值得一讀。


Bruce Eckel, Thinking in C++, Volume 1: Introduction to Standard C++ (2nd Edition)


Bruce Eckel, Thinking in C


Bruce Eckel, Thinking in C

2:3m) C++程式設計思想(第2版)第1卷:標準C++導引》,機械工業出版社


《C++程式設計思想(英文版第2版)》,機械工業出版社


《 Thinking in C++》的第1版於1996年榮獲「軟體研發」雜誌評選的圖書震撼大獎。最新推出的第2版對內容進行了大幅改寫和調整,以反映C++標準化帶來的影響以及近年來物件導向領域最新研究和實踐成果。 「輸入輸入流」、「多重繼承」、「異常處理」和「運行時類型識別」等高級主題連同C++標準化以後增加的一些內容則被放入第二卷中。 Bruce是一位經驗豐富的C++講師和顧問,其培訓和寫作經驗都是世界一流水準,他的作品比那些「玩票」的技術人員寫的東西更能吸引讀者。事實上,在同類圖書中,對於大多數讀者而言,這本書的可讀性要超過TCPL和《C++ Primer》。順帶一提,造訪作者的站點,你可以先睹第二卷的風采。


Andrew Koenig, Barbara E. Moo, Ruminations on C++: A Decade of Programming Insight and Experience


《C++錄錄》,人民郵電出版社


《C++5》,

Andrew是全世界屈指可數的C++專家。這是一本關於C++程式設計思想和程式設計技術而非語言細節的著作。如果你已經有一定的基礎,這本書將教你在進行C++程式設計時應該如何思考,應該如何表達解決方案。整本書技術表達透徹,文字通俗易懂。 Bjarne這樣評價這本書:本書遍佈「C++是什麼、C++能夠做什麼」的真知灼見。


Stanley B. Lippman, Inside The C++ Object Model


《深度探索C++物件模型》,華中科技大學出版社

中國電力出版社


從編譯器的角度觀察C++可以使你知其然並知其所以然。本書探討了大量的C++物件導向程式設計的底層運作機制,包括建構函式、函式、臨時物件、繼承、虛擬、範本的實例化、異常處理、運行期類型辨識等,另外也介紹了一些在實現C++物件模型過程中所做的權衡折衷。喜歡刨根問底的C++程式設計師不要錯過這本書。


Erich Gamma, Richard Helm, Ralph Johnson, John Vlissides, Design Patterns: Elements of Reusable Object-Oriented software


《設計模型:可重複使用物件模式


《設計模式:可重複使用物件導向軟體的基礎(英文版)》,機械工業出版社


設計可重複使用的物件導向的軟體,你需要掌握設計模式。本書並非專為C++程式設計師而寫,但它採用了C++(以及Smalltalk)作為主要範例語言,C++程式設計師尤其易於從中受益。四位作者都是國際公認的物件導向軟體領域專家,他們將物件導向軟體的設計經驗作為設計模式詳細記錄下來。這本書影響是如此深遠,以至於四位作者以及本書都被暱稱為GoF(Gang of Four)。本書學院氣息濃厚,行文風格嚴謹簡潔,雖然它不如某些講解模式的書籍易讀,但真正要精準地理解設計模式,本書是終極權威。學習設計模式,這本書需要一而再、再而三的咀嚼。順帶一句:請將設計模式化為開拓思維的鑰匙,切莫成為封閉思維的枷鎖。


還有一些C++好書值得一讀,恕此處無法一一列出。例如John Lakos的著作《Large-Scale C++ Software Design》(《大規模C++程式設計》,中國電力出版社)和侯捷先生的《STL 原始碼剖析》(華中科技大學出版社)等。


《STL 原始碼剖析》是一本很有特色的書,但我認為它還可以更好。我個人期待侯捷先生自第一版發行以來經過對模板技術的沉澱和再思考之後,再寫一本剖析得更深入、更透徹並且更全面的“第二版”。遺憾的是,侯捷先生在完成《C++ Templates: The Complete Guide》一書的翻譯後似乎決定暫時告別模板、泛型編程和STL領域。


2004年3月31日補充:我目前最常查閱的兩本參考書是《C++標準程式庫》和《STL源碼剖析》。當然了,這與我年內的寫作計畫有很大的關係。


使用C++成功開發大規模軟體系統,不僅需要很好地理解大多數C++書籍中講述的邏輯設計問題,更需要掌握《大規模C++程式設計》中所述的物理設計技術。當然,這本書的確有點過時了,不過,如果你的精力和金錢都比較寬綽,買一本看看並無壞處。


至此,我想有必要聲明一​​下,有一些(好)書沒有得到推薦,主要原因如下:


以上這些書已經足夠多、足夠好了。


我不會推薦透過正常管道很難購買到的書籍 — 不管是中文版還是英文版。


作(譯)者名氣大小不影響我的推薦。我們在看書,不是看人。


我不會推薦我從來沒看過的書。我至少要看過其中的某個版本(包括電子檔)。這個“看”,一般指“認真閱讀”,不過有些也只能算是“瀏覽”。


結語


作為一名普通技術寫譯者,我深知技術創作和翻譯的艱辛(和快樂),並多多少少了解一些有關技術書籍創作、翻譯、製作、出版以及市場推廣背後的細節。今天,我不會再對一本看起來差強人意的書信口開河。羅列同一本書的各種版本的用意只在於為你多提供一些信息,讓你多一種選擇。


在本文成文的後期,我給Bjarne寫了一封信,請教如果他來寫這篇文章會怎麼寫。他給了我簡潔扼要的建議。在肯定以上列出的絕大部分圖書都是世界頂尖水平的C++著作的同時,Bjarne提醒我別忘了向專家級程式設計師推薦《The C++ Standard : Incorporating Technical Corrigendum No. 1》。這本書是 C++標準規範的“圖書版”,Bjarne親自為之作序。


Bjarne還友好地提醒我,在我的推薦清單中沒有哪一本有助於C++程式設計師進行Windows程式設計 — 這正是我的本意。在這篇文章中,我只推薦、評論平台中立的C++著作(網路程式設計除外) — 和作業系統無關,和整合開發環境無關,我甚至幻想它們和編譯器也無關。你可以根據業務開發需要,選讀自己喜愛的領域相關的C++書籍。


說到“系統無關、平台中立”,我不由得想起了“抽象層”的概念。開發實際應用的C++程式設計師通常工作於特定作業系統、特定開發環境和特定業務領域之中,而對標準C++和C++標準庫紮實而深刻​​的把握,無疑是你得以在不同的作業系統、不同的開發環境以及不同的業務領域之間縱橫馳騁的「抽象」本錢。

以上就是C++程式設計之四書五經的內容,更多相關內容請關注PHP中文網(www.php.cn)!


陳述:
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn