
書籍信息
書名:《C++ Primer 中文版(第 5 版)》
原作名:C++ Primer, 5th Edition
作者:[美] Stanley B. Lippman / [美] Josée Lajoie / [美] Barbara E. Moo
內容簡介
這本久負盛名的 C++經(jīng)典教程,時隔八年之久,終迎來史無前例的重大升級。除令全球無數(shù)程序員從中受益,甚至為之迷醉的——C++ 大師 Stanley B. Lippman 的豐富實踐經(jīng)驗,C++標準委員會原負責人 Josée Lajoie 對 C++標準的深入理解,以及 C++ 先驅 Barbara E. Moo 在 C++教學方面的真知灼見外,更是基于全新的 C++11 標準進行了全面而徹底的內容更新。非常難能可貴的是,《C++ Primer 中文版(第 5 版)》所有示例均全部采用 C++11 標準改寫,這在經(jīng)典升級版中極其罕見——充分體現(xiàn)了 C++ 語言的重大進展及其全面實踐。書中豐富的教學輔助內容、醒目的知識點提示,以及精心組織的編程示范,讓這本書在 C++ 領域的權威地位更加不可動搖。無論是初學者入門,或是中、高級程序員提升,本書均為不容置疑的首選。
作者簡介
Stanley B. Lippman 目前是微軟公司 Visual C++ 團隊的架構師。他從 1984 年開始在貝爾實驗室與 C++的設計者 Bjarne Stroustrup 一起從事 C++的設計與開發(fā)。他在迪士尼和夢工廠從事動畫制作,還擔任過 JPL 的高級顧問。
Josée Lajoie 曾經(jīng)是 IBM 加拿大研究中心 C/C++編譯器開發(fā)團隊的成員,在 ISO C++標準委員會工作了 7 年,擔任過 ISO 核心語言工作組的主席和 C++ Report 雜志的專欄作家。
Barbara E. Moo 是擁有 25 年軟件經(jīng)驗的獨立咨詢顧問。在 AT&T,她與 Stroustrup、Lippman 一起管理過復雜的 C++開發(fā)項目。
分享理由
(引用 孟巖推薦序 2013 年 8 月)
C++11 標準公布之后,C++社群出現(xiàn)了久違的熱情,有人甚至叫出“C++的復興”。指望 C++回到 20 世紀 90 年代中期那樣的地位顯然是昧于大勢的奢望,但是 C++經(jīng)歷了這么多年的打磨與起伏,其在工業(yè)界的地位已經(jīng)非常穩(wěn)固,在很多領域里已經(jīng)是不可取代也沒必要被取代的統(tǒng)治者。新標準的出現(xiàn)能夠大大提升 C++開發(fā)的效率和質量,因此贏得歡呼也是情理之中。在這種氛圍之下,編譯器實現(xiàn)的速度也令人驚喜。短短兩年時間,從開源的 GCC、LLVM 到專有的 VisualC++和 Intel C++,對于新標準的追蹤之快,覆蓋之全,與當年 C++98 標準頒布之后遲遲不能落地的窘境相比,可謂對比強烈。當年是熱情的開發(fā)者反復敦促廠商實現(xiàn)完整標準而不得,為此沮喪無奈,那種心情,至今記憶猶新。時過境遷,今天是編譯器實現(xiàn)遠遠沖在前面,開發(fā)者倒是大大地落在了后面。
時至今日,能夠基本了解 C++11 標準的程序員恐怕不多,而能夠以新的 C++風格開發(fā)實踐的人更是鳳毛麟角。因此,今天的 C++開發(fā)者面臨的一個重要任務就是快速掌握新的 C++風格和工具。
而說到教授“正宗的”C++11 編程風格,《C++Primer(第 5 版)》如同它之前的版本一樣,扮演著法定教科書的角色。
一種優(yōu)秀的編程語言,一定要對于計算這件事情實現(xiàn)一個完整和自洽的抽象。十幾年來編程語言領域的競爭,除卻實現(xiàn)質量之外,基本上是在比拼抽象的設計。而 C 語言之所以四十年長盛不衰,根本在于它對于現(xiàn)代計算機提供了一個最底層的高級抽象:凡是比它低的抽象都過于簡陋,凡是比它高的抽象都可以用 C 語言構造出來。C++成功的根本原因,恰恰是因為它雖然試圖提供一些高級的抽象機制,但是其根基與 C 在同一層面。正因為如此,每當你需要走下去直接與硬件對話時,C++成為 C 之外唯一有效率的選擇。我的一個朋友在進行了多年的大型系統(tǒng)軟件開發(fā)之后,不無感慨地說,C++最大的力量不在于其抽象,恰恰在于其不抽象。
話雖然如此,但是 C++之所以脫離 C 而存在,畢竟還是因為其強大的抽象能力。BjarneStroustrup 曾經(jīng)總結說,C++同時支持 4 種不同的編程風格:C 風格、基于對象、面向對象和泛型。事實上,把微軟的 COM 也算進來的話,還可以加上一種“基于組件”的風格。這么多的風格共存于一種語言,就是其強大抽象機制的證明。但是,在 C++11 以前,C++的抽象可以說存在若干缺陷,其中最嚴重的是缺少自動內存管理和對象級別的消息發(fā)送機制。今天看來,C++98 只能說是特定歷史條件造成的半成品,無論是從語言機制,還是標準庫完備程度來說,可以說都存在明顯的、不容忽略的缺陷。其直接后果,就是優(yōu)雅性的缺失和效率的降低。我本人在十年前曾經(jīng)與當時中國 C++社群中不少杰出的人物交流探討,試圖從 C++98 中剪裁出一個小巧、優(yōu)雅的、自成一體的子集,希望至少在日常編程中,能夠在這個子集之內可以寫出與當時的 Java 和 C#同樣干凈明晰的代碼。為此我們嘗試了各種古怪的模板技巧,并且到處尋找有啟發(fā)的代碼和經(jīng)驗來構造這個語言子集,結果并不理想,甚至可以說是令人非常失望。后來我在我的博客中發(fā)表過好幾篇文章,探討所謂的 C++風格問題,其實就是說,C++不支持簡潔明快的面向對象風格,大家還不如回到基于對象甚至 C 語言的風格,最多加點模板,省一點代碼量。非要面向對象的話,就必須依賴像 Qt 或者 MFC 那樣的基礎設施才可以。
C++11 出來之后,增強的語言機制和大為完善的標準庫,為 C++語言的編程風格帶來了革命性的變化。如果能夠純熟地運用 C++11 的新特征、新機制,那么就能夠形成一種簡潔優(yōu)雅的 C++編程風格,以比從前更高的效率、更好的質量進行軟件開發(fā)。對于這種新的風格,我認為“直覺、自然”是最佳的描述。也就是說,解決任何問題不必拘泥于什么籠蓋一切的編程思想,也不再沉溺于各種古怪的模板技巧中無法自拔,而是能夠根據(jù)那個問題本身采用最自然、最符合直覺的方式。C++有自己的一套思維方式,比如容器、算法、作為概念抽象的對象等,很大程度上這套思維方式確實是合乎直覺的。只有到了 C++11 這一代,C++語言的高級抽象才基本完備,這樣一種風格才可能真正落實。因此可以說 C++11 對于 C++98 而言,不是一次簡單的升級,而是一次本質的躍升。
學習新的 C++風格,并不是輕而易舉的事情。即便對于以前已經(jīng)精通 C++的人來說,熟練掌握 rvaluereference、move 語義,了解 unique_ptr、shared_ptr 和 weak_ptr 的完整用法,明智地使用 function/bind 和 lambda 機制,學習 C++Concurrency 的新技術,都絕非一朝一夕之功。對于那些初學者來說,這件事情更不簡單。
本書無論對于初學者還是提高者,都是最經(jīng)典的教科全書。一直以來,它的特點就是完整而詳細,基本上關于語言本身的問題,都可以在這本書里得到解決。而本書的另一個重要優(yōu)點,就是其完全基于新的編程風格編寫,所有的例子和講解都遵循 C++11 標準所體現(xiàn)出來的思路和風格進行,如果能夠踏下心來認真學習和練習,那么就能“一次到位”地掌握 C++11,盡管可能會比較慢。有經(jīng)驗的 C++開發(fā)者閱讀這本書當然不用從頭到尾,選擇自己關心的內容學習 C++11 的新特性就可以,是快速升級自身能力的捷徑。
差不多十年前,我提出一個觀點,每一個具體的技術領域,只需要讀四五本書就夠了。以前的 C++是個例外,因為語言設計有缺陷,所以要讀很多書才知道如何繞過缺陷?,F(xiàn)在的 C++11 完全可以了,大家讀四五本書就可以達到合格的水平,這恰恰是語言進步的體現(xiàn)。
本書是這四五本中的一本,而且是“教程+參考書”,扛梁之作,初學者的不二法門。另一本是《C++標準程序庫(第 2 版)》,對于 C++熟手來說更為快捷。ScottMeyers 的 Effective C++永遠是學習 C++者必讀的,只不過這本書的第 4 版不知道什么時候出來。AnthonyWilliams 的 C++ Concurrency inAction 是學習用標準 C++開發(fā)并發(fā)程序的最佳選擇。國內的作品,我則高度推薦陳碩的《Linux 多線程服務端編程》。這本書的名字趕跑了不少潛在的讀者,所以我要特別說明一下。這本書是 C++開發(fā)的高水平作品,與其說是教你怎么用 C++寫服務端開發(fā),不如說是教你如何以服務端開發(fā)為例子提升 C++開發(fā)水平。前面幾本書都是談標準 C++自己的事情,碰到像 iostream 這樣失敗的標準組件也不得不硬著頭皮介紹。而這本書是接地氣的實踐結晶,告訴你面對具體問題時應怎樣權衡,C++里什么好用,什么不好用,為什么,等等。
今天的 C++學習者是非常幸運的,可以在 C++11 這個基礎上大步向前,不必再因為那些語言的缺陷和過度的技巧而煩惱。大家靜下心來認真讀幾本書,可以打下很好的基礎。