這篇文章其實是我本身入門過程的總結,一個儘可能少廢話的C++入門指南。總結完突然發現像個讀書清單😄。html
具體總結前,想先回答一個問題——要不要先學C,再學C++?
我做爲小白時疑惑過這個問題,在此給後來的小白和當年的本身一個答案。
我的見解是,單就學習C++而言,直接學習C++就能夠了,不用先學C。在知乎看到輪子哥在微軟維護STL的Stephen Thomas Lavavej都說他當年學C++以前學C語言浪費了大量的時間,早知道就直接從C++開始。前端
不少老的項目是C語言寫的,以後的編程生涯多半仍是繞不開學C語言,不過那時候你已有C++功底,構不成啥大問題。java
所以,這篇文章基本不提C的學習,直接硬剛C++。不贊同的看客勿噴,右上叉叉就是了。贊同的同窗能夠往下看。android
《Accelerated C++》,《Essential C++》二選一精讀。《A Tour of C++》選讀。c++
主看書的同時,輔以這幾個網站的資料,交叉印證——程序員
(目的只是印證,別的資料也能夠,網上多如牛毛,這裏只是貼了我當時看的)編程
我當初主看的是 Accelerated C++,在上下班通勤等零碎時間就在手機上看輔助部分的資料,看看跟讀書的理解一不同。甚至有時能意識到資料中某些概念的表述不太準確,此刻會發覺本身真的理解了。
這種交叉印證的閱讀法,有人問我有什麼必要?(看了幾個內容可能重疊的資料)。好處有兩個,一是能使本身入門時對基礎理解的自信更足些;二是,我沒見過哪本書或哪篇文章,能夠從頭至尾徹底清晰、毫無歧義的。交叉着看可讓不少理解儘早明晰無誤。xcode
完成這一步後,就能夠開始上GitHub看點別人的代碼,嘗試寫點代碼。
個人話,學了在xcode下新建C++工程,而後參照這幾個連接,寫了兩個計算器和一個學生管理系統。而後開始搬磚了。
計算器1:blog.csdn.net/jiejinquani…
計算器2:www.zhihu.com/question/28…
學生管理系統:blog.csdn.net/qcyfred/art…函數
入門這一步是最關鍵的,你初步瞭解了各類基本概念,併成功書寫和運行起了代碼,感受真棒吧。
接着下面介紹的,就是順利入門之後的廣闊大海,慢慢慢慢慢慢慢慢、好好好好遊吧。留心,不要急,千萬不要抱有直接把後面的內容一口氣學完,再開始幹活的想法。由於那樣要耗費巨量時間且效果很差,何況C++是學不完的,也沒有人敢說精通。請一邊投入實做,一邊保持學習。性能
入門後有時間就要閱讀些更系統的書。 具體就是《C++ Programming Language》(如今已經有第四版了)和《C++ Primer》二選一精讀。以後有時間能夠翻翻另外一本。
(強調提示 !!!《C++ Primer》和《C++ Primer Plus》不是同一本書的不一樣版本,做者也不同。【不建議】看《C++ Primer Plus》)
到這裏你應該跨過了語法障礙了,要開始瞭解函數庫。能夠按順序看看《C++標準庫》、《深刻理解C++對象模型》和侯捷老師的《STL源碼剖析》。
如今應該對C++算有小小成,可能會對如何寫出更好性能、更優雅的C++代碼感興趣,能夠繼續看《Effective C++》和《More Effective C++》,《Exceptional C++》。這幾本書,能讓你瞭解優秀工程實踐,認真看完能說有自信較有質量地參與工程項目了。
能堅持到最後這步,你可能快瘋了,瘋子喜歡問哲學問題,好比C++是誰、從哪來、要到哪去。
嘗試讀讀《C++沉思錄》、《The Design and Evolution of C++/C++語言的設計和演化》。
另外 C++(C語言) 在一衆高級語言裏面卻算是比較貼近計算機底層的語言。多瞭解計算機結構、存儲、運算原理方面的知識,會對C++ 的前因後果理解得更透徹,能夠讀讀《計算機科學導論》、軟件工程的《代碼大全》、操做系統的《現代操做系統》、程序員入門的《深刻理解計算機系統》。
2018.10.12 更新
就對於Android開發者而言學習C/C++有沒有必要呢,怎麼結合起來呢? ——夜幕降流星雨 android開發 @ android
我的以爲必要性要看所在公司的業務領域和你的我的興趣。好比直播公司涉及的音視頻業務,必然是要涉及c/c++的(ffmpeg啥的哪有java代碼);相似的須要c/c++的業務通常是些重性能、偏底層的東西。若是你判斷本身公司中短時間都沒這個須要,那就輪到看本身有沒有興趣了。前景的話說句題外話,大前端慢慢侵蝕原生開發,慢慢單純的Android開發會被替代的,雖然過程應該很很很緩慢。一方面你也能夠轉大前端,這樣比較快速;另外一方面就是能夠深刻作這些偏底層的東西,沒那麼容易替代,但將來的事情誰又說得清楚呢,哈哈。
Android和C/C++怎麼結合起來? 能夠搜索ndk、jni等關鍵字瞭解,網上鋪天蓋地的基本教程。這個學會基本使用應該你們都沒啥問題,可是若是是更深刻一點,好比具備明確功能的代碼中,c代碼是怎麼結構的,生命週期,怎麼跟android(java)配合等等,說實話,須要一個項目的實踐。這方面我有很好的思考以後會從小白0基礎的角度寫點文章。