推薦書目 - C++學習資料

前言


在本文的前半部分我我會談談 我看過的書,和我個人的一些理解 ,并且會提供 C++標準委員會相關鏈接C++第三方輪子/庫總結 。本文的后半部分翻譯了來自 The Definitive C++ Book Guide and List - StackOverflow Forum 的推薦書籍。讀者有補充或有異議的話可以在評論區進行評論。另外,感謝余思雨同學在本文下篇的翻譯,下篇翻譯由她完成。

上篇:我看過的書和經驗總結


溫馨提醒

C++之父在CppCon說現在學C++的話,最起碼的baseline應該是C++11,所以希望大家可以從C++11開始學。然后C++的學習主要分為兩個部分: C++語言特性的學習C++庫的學習, 現在 isocpp Core-Guide-Linesisocpp C++ Technical Specification Status 分別為C++之父對大家使用語言的一些建議和標準委員會對新的庫規格或語言規格標準的指定狀態。

入門讀物

  • C++Primer第5版, 這是一本主要介紹C++語言的書籍,講述地比較詳細,在第5版之后加入了 C++11 的許多內容,比如 auto/可變參數模板/lambda表達式等等,學了這本書之后可以開始寫寫玩具程序了。

  • Effective C++, 這是一本通過一些條目介紹C++11之前的C++標準上的一些實踐注意點,想寫非玩具程序(容易讀懂并且高效的工程程序)的讀者推薦看看。

  • Effective Modern C++, 這是一本通過一些條目介紹C++11/14新特性的書籍,我覺得它提綱挈領地講述了C++11語言新特性的使用注意點,想寫非玩具程序(容易讀懂并且高效的工程程序)的讀者推薦看看。

進階讀物

  • Inside C++ Object Model,可以看看,了解面向對象是怎么實現出來的,所謂的封裝/繼承/多態。書的作者推薦大家使用面向對象。

  • STL源碼剖析,這本中文書書講地不錯,從源碼角度來介紹STL的實現,不過要求讀者熟悉 C++ Tempalates ,C++1x的模板包括函數模板/類模板/別名模板/變量模板,在這本書的第一章會介紹一些編譯器對于模板處理的知識,不過我推薦大家可以先看看這個Youtube視頻: Template Normal Programming Part1Template Normal Programming Part2 ,講得不錯,言簡意賅,看了視頻再看書,應該沒什么問題了。從這本書可以復習數據結構和算法的一些知識。

  • Boost程序庫指南, 簡單講述了使用的Boost庫中組件,比較基礎。

  • Boost程序庫探秘, 主要講解Boost庫中的一些實現,在領會了 STL源碼剖析 之后看起來不會非常費力,并且比較有趣。

上篇:C++資源推薦


C++標準委員會相關鏈接

C++第三方輪子/庫總結

下篇:Beginner


Introductory, no previous programming experience

  • Programming: Principles and Practice Using C++ (Bjarne Stroustrup)(更新至版本 C++11/C++14) :由C ++語言的創建者編寫編程參考書的。 這是一本挺好的讀本,全書基于讀者沒有編程經驗的編寫思路,但不僅僅局限于滿足初學者水平。

Introductory, with previous programming experience

  • C++ Primer * (Stanley Lippman, Josée Lajoie, and Barbara E. Moo)(更新至版本 C++11) :全書有1k頁,非常徹底的介紹了C ++,以一種易于理解的格式和詳盡的內容涵蓋了這門語言涉及的方方面面。 第五版(2012年8月16日發布)與C++11同步。

  • A Tour of C++ (Bjarne Stroustrup)(電子書):“tour”約180頁,包含14章,是一個概述所有的標準C ++(語言和標準庫,并使用C ++ 11)的快速教程。此書適用于處于中高水平且已經知道C + +或至少是有經驗的程序員。在內容上,此書相當于The C++ Programming Language (4th edition)一書的第2-5章的擴展版本。

  • Accelerated C++ (Andrew Koenig and Barbara Moo): 這本書基本上覆蓋了與C ++ Primer一書相同的章節內容,但僅僅是后者的四分之一字數。這主要是因為成書的目的不是作為編程的介紹,而是向以前用其他語言編程的人介紹C ++。此書常給讀者一種學習難度起伏較大的感覺,但是,如果你可以應付這種章節難度的不一致性,此書將是你學習C++的一個非常緊湊的介紹工具。(歷史上,此書是第一本使用現代方法教授語言的初學者書籍,這一點是一個大的突破。)

  • Thinking in C++ (Bruce Eckel): 全書含兩卷,是一個免費的教程風格的介紹級讀本。下載:vol 1,vol 2.然而,此書存在一些瑣碎的錯誤(例如,臨時變量自動變成const),關鍵是你找不到官方勘誤表。部分第三方勘誤表可以在(http://www.computersciencelab.com/Eckel.htm)上找到,但顯然沒有維護。

Not to be confused with C++ Primer Plus (Stephen Prata), 這本書評價不太好,大家自己感受吧。

下篇:Best practices


  • Effective C++ (Scott Meyers) 此書旨在成為最好的C ++程序員應該閱讀的第二本書(強調:這本書不是入門書),顯然作者成功了。早期版本針對是C程序員,第三版做了改變了,并瞄準Java等語言的程序員。它提供了50多個容易記住的經驗規則并解釋了緣由,讀者體驗比較愉快輕松。對于C ++ 11和C ++ 14,示例和一些問題已經過時,這種情況下Effective Modern C++ 是首選。

  • Effective Modern C++ (Scott Meyers) 這基本上就是Effective C++ 的新版本,目標實現C ++程序員從C ++ 03到C ++ 11和C ++ 14的過渡。

  • Effective STL (Scott Meyers) 此書目的是實現類似Effective C++對標準庫中來自STL的那部分所實現的功能:此書提出了經驗法則以及其解釋。

下篇:Intermediate


  • More Effective C++ (Scott Meyers) 此書包含比Effective C++更多的經驗法則。作為入門書,沒有一本書可以比擬此書,所以,不多說,大家去看吧。

  • Exceptional C++ (Herb Sutter) 以解決問題的方式呈現,此書是C ++中關于適當的資源管理和異常安全的最好最徹底的討論之一,通過資源獲取初始化(RAII)和對各種其他主題的深入報道,包括指向實現的指針,名稱查找,好的類設計和C ++內存模型。

  • More Exceptional C++ (Herb Sutter) 此書涵蓋Exceptional C++中未涵蓋的額外的異常安全問題和對C ++中有效的面向對象編程和正確使用STL的探討。

  • Exceptional C++ Style (Herb Sutter) 此書討論通用編程,優化和資源管理三個方面;這本書還針對如何使用非成員函數和單責任原則在C ++中編寫模塊化代碼問題進行了很好的闡述。

  • C++ Coding Standards (Herb Sutter and Andrei Alexandrescu) “ Coding Standards”這里并不意味著“我的代碼中應該有多少空格縮進?”此書包含101個最好的實例,指針和常見的陷阱,可以幫助讀者編寫正確的,可理解的,高效的C ++代碼。

  • C++ Templates: The Complete Guide (David Vandevoorde and Nicolai M. Josuttis) 這是一本關于模塊的書,寫于C ++ 11出現之前。 此書涵蓋從基礎知識到一些最先進的模塊編程的所有內容,并細節化地解釋了模塊的工作原理(概念和如何實現),討論了許多常見的陷阱。 在附錄中有單一定義規則(ODR)和重載分辨率的重要摘要。 第二版定于2017年出版。

下篇:Advanced


  • Modern C++ Design (Andrei Alexandrescu) 這是一本關于高級通用編程技術的開創性讀本。 此書引入基于策略的設計,類型列表和基本的通用編程習語,并解釋了可以有效,模塊化和干凈地使用通用編程實現多少有用的設計模式(包括小對象分配器,函子,工廠,訪問者和多方法)。

  • C++ Template Metaprogramming (David Abrahams and Aleksey Gurtovoy) 略

  • C++ Concurrency In Action (Anthony Williams) 一本涵蓋C ++ 11并發支持的書,包括線程庫,原子庫,C ++內存模型,鎖定和互斥量,以及設計和調試多線程應用程序的問題。

  • Advanced C++ Metaprogramming (Davide Di Gennaro) TMP技術的前C ++ 11手冊,著重點在于實例而不是理論。在這本書中有很多片段,其中一些片段被typetrait淘汰了,但是知道這些技術總是有用的。如果你能忍受古怪的格式/編輯,此書會比Alexandrescu(一個C++大師 Andrei Alexandrescu)更容易閱讀,可以說,更有價值。對于更有經驗的開發人員,此書提供了一個很好的機會,因為只有通過豐富的經驗才能學到關于C ++的盲區(一個怪癖)的一些知識。

下篇:Reference Style - All Levels


  • The C++ Programming Language (Bjarne Stroustrup) (更新至版本 C++11):此書是C++的創作者寫的關于C ++的經典介紹。作為與經典K&R的并行,此書確實讀起來非常相似,內容涵蓋了核心語言到標準庫,到編程范式到語言哲學。

  • C++ Standard Library Tutorial and Reference (Nicolai Josuttis) (更新至版本 C++11):此書是對于C ++標準庫的介紹和參考。 第二版(2012年4月9日發布)同步與C ++ 11。

  • The C++ IO Streams and Locales (Angelika Langer and Klaus Kreft) 沒什么可多說的,如果你想知道關于流本和地環境的任何知識,那么這本書會給你滿意的答案。

C++11/14 References:

  • The C++ Standard (INCITS/ISO/IEC 14882-2011) 此書當然是標準的最終仲裁者,不論是或不是C ++。 但是,值得注意的是,這僅僅是為了給有經驗且愿意花費大量的時間和精力來理解它的用戶寫的參考。一如既往,第一個版本是相當昂貴的($ 300 +美國),但它現在已經以電子版形式發布$ 60US。版本C ++ 14標準是可用的,但似乎不是很經濟 - 直接從ISO,成本198瑞士法郎(約200美元)。 對于大多數人來說,在標準化之前的最后草案是足夠的(和免費的)。許多人會喜歡甚至更新的草案,記錄可能包括在C ++ 17中的新功能。

  • Overview of the New C++ (C++11/14) (PDF only) (Scott Meyers) (更新至版本 C++11/C++14):這是Scott Meyers提供的為期三天的培訓課程的演講材料(幻燈片和一些演講),Scott Meyers是C ++的一位備受尊敬的作家。 盡管內容列表很短,但是質量很高。

  • The C++ Core Guidelines (C++11/14/17/…) (edited by Bjarne Stroustrup and Herb Sutter) 此書是一個不斷發展的在線文檔,包括一套使用現代C ++的指南。該指南著重于解決相對較高級別的問題,如接口,資源管理,內存管理和并發影響應用程序體系結構和庫設計。此項目是由Bjarne Stroustrup和其他人在CppCon'15發布,并歡迎社區的貢獻。大多數指南補充了一個理由和例子,以及討論可能的工具支持。許多規則被專門設計為可由靜態分析工具自動檢查。

  • The C++ Super-FAQ (Marshall Cline, Bjarne Stroustrup and others) 這是標準C ++基金會力爭統一以前由Marshall Cline和Bjarne Stroustrup個別維護的C ++常見問題,并納入新的貢獻。 這些項目主要解決中間層面的問題,寫作語調幽默。并非所有項目都可能完全更新到最新版本的C ++標準。

  • cppreference.com (C++03/11/14/17/…) (initiated by Nate Kohl) 本質是一個維基百科(wiki),總結了基本的核心語言特性,并有大量的C ++標準庫文檔。文檔非常精確,且比官方標準文檔更容易閱讀,并且由于其wiki性質而提供更好的內容導航。該項目記錄了C ++標準的所有版本,并且站點允許過濾特定版本的顯示。 該項目由Nate Kohl在CppCon'14展示。

下篇:Classics / Older


注意:這些圖書中包含的一些信息可能不是最新的或不是當前的最佳做法。

  • The Design and Evolution of C++ (Bjarne Stroustrup) 如果你想知道這門語言的演變過程,這本書是你找到答案的地方。此書涵蓋了C ++標準化之前的一切。

  • Ruminations on C++ - (Andrew Koenig and Barbara Moo) 略

  • Advanced C++ Programming Styles and Idioms (James Coplien) 作為模式化運動的前身,此書描述了許多C ++特定的“成語”。 毋庸置疑,這是一本非常棒的讀本,如果你有時間,此書實在是值得一讀,但是書的內容相當舊,沒有更新到當前的C + +。

  • Large Scale C++ Software Design (John Lakos) Lakos解釋了管理非常大的C ++軟件項目的技術。 毋庸置疑,這是一本非常棒的讀本,如果更新的話。此書成書于C ++ 98之前,并且缺少針對大型項目的很重要的許多功能(例如命名空間)。如果你需要在一個大的C ++軟件項目中工作,建議讀一下,雖然在讀的時候需要多一點輔助資料。(新版的第一卷預計于2015年發行?)

  • Inside the C++ Object Model (Stanley Lippman) 解釋了:虛擬成員函數是如何被普遍實現的,基本對象如何在多繼承場景中被共同布置在內存中,以上這些工作如何影響性能。

  • The Annotated C++ Reference Manual (Bjarne Stroustrup, Margaret A. Ellis) 這本書涉及1989 C ++ 2.0版本,已經相當過時了 - 沒有介紹模板,異常,命名空間和新的鑄造。然而,此書覆蓋了整個C ++標準的時間,包括解釋的理由,語言的可能的實現和功能。這是一本學習C ++編程原理和模式的書,幫助讀者理解C ++語言的每一個方面。

最后編輯于
?著作權歸作者所有,轉載或內容合作請聯系作者
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市,隨后出現的幾起案子,更是在濱河造成了極大的恐慌,老刑警劉巖,帶你破解...
    沈念sama閱讀 227,428評論 6 531
  • 序言:濱河連續發生了三起死亡事件,死亡現場離奇詭異,居然都是意外死亡,警方通過查閱死者的電腦和手機,發現死者居然都...
    沈念sama閱讀 98,024評論 3 413
  • 文/潘曉璐 我一進店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人,你說我怎么就攤上這事。” “怎么了?”我有些...
    開封第一講書人閱讀 175,285評論 0 373
  • 文/不壞的土叔 我叫張陵,是天一觀的道長。 經常有香客問我,道長,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 62,548評論 1 307
  • 正文 為了忘掉前任,我火速辦了婚禮,結果婚禮上,老公的妹妹穿的比我還像新娘。我一直安慰自己,他們只是感情好,可當我...
    茶點故事閱讀 71,328評論 6 404
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著,像睡著了一般。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發上,一...
    開封第一講書人閱讀 54,878評論 1 321
  • 那天,我揣著相機與錄音,去河邊找鬼。 笑死,一個胖子當著我的面吹牛,可吹牛的內容都是我干的。 我是一名探鬼主播,決...
    沈念sama閱讀 42,971評論 3 439
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了?” 一聲冷哼從身側響起,我...
    開封第一講書人閱讀 42,098評論 0 286
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后,有當地人在樹林里發現了一具尸體,經...
    沈念sama閱讀 48,616評論 1 331
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內容為張勛視角 年9月15日...
    茶點故事閱讀 40,554評論 3 354
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發現自己被綠了。 大學時的朋友給我發了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 42,725評論 1 369
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖,靈堂內的尸體忽然破棺而出,到底是詐尸還是另有隱情,我是刑警寧澤,帶...
    沈念sama閱讀 38,243評論 5 355
  • 正文 年R本政府宣布,位于F島的核電站,受9級特大地震影響,放射性物質發生泄漏。R本人自食惡果不足惜,卻給世界環境...
    茶點故事閱讀 43,971評論 3 345
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧,春花似錦、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 34,361評論 0 25
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至,卻和暖如春,著一層夾襖步出監牢的瞬間,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 35,613評論 1 280
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人。 一個月前我還...
    沈念sama閱讀 51,339評論 3 390
  • 正文 我出身青樓,卻偏偏與公主長得像,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當晚...
    茶點故事閱讀 47,695評論 2 370

推薦閱讀更多精彩內容

  • 轉自http://blog.csdn.net/xugangwen/article/details/44811783...
    扎Zn了老Fe閱讀 12,772評論 1 142
  • 本文把程序員所需掌握的關鍵知識總結為三大類19個關鍵概念,然后給出了掌握每個關鍵概念所需的入門書籍,必讀書籍,以及...
    dle_oxio閱讀 11,156評論 6 244
  • 你的所謂時間不多是,每天偷工減料的玩樂 你所謂的借書閱讀,只是讓它布上了一層灰 你所謂的命不由人,只是借口一籮筐 ...
    茱麗親吻夜閱讀 246評論 1 0
  • 鷓鴣天*惜春(新韻) 文/小家碧玉(河南) 昨日西風飄絮空,今朝春雨又叮咚。玉盤珠淚微遮面,看客憂心憐華容。 春暮...
    小家碧玉_9512閱讀 428評論 1 1
  • 我還是我,你還是你嗎? 我常常問我自己這真的是你想要的嗎? 現在的社會發展越來越快,我們壓力也越來越大,經常會忽略...
    玥貓閱讀 197評論 0 0