當前位置: 華文星空 > 知識

如何系統地學習 C++ 語言?

2014-05-26知識

由於我大一也陷入過迷茫,也走過一些彎路,那時候學不會直接記憶程式碼之類的事情我都幹過,我也希望我的這些經驗可以對你有所幫助。

首先是一本好的C++書籍(Accelerated C++, C++ Primer),然後以及盡量多的完成書籍的習題,可以幫助完成C++語法的學習。雖然前面的書籍涵蓋了標準庫,但是不夠完善,這個時候你可以選擇線上查閱C++標準庫這種泛型的學習方式,也可以選擇閱讀【C++標準庫】的方式進行學習。透過這樣的步驟,你應該可以完成C++的初步學習了。

然後,由於C++是一門系統級語言,我想你需要到大三學習作業系統的時候,才會明白棧與堆、記憶體管理等更深層次的含義。但是,在明白這些概念之前不會妨礙你利用C++做一些事情,比如寫一個簡單的XML Parser。這個時候,你應該會發現很多問題,如效率,程式碼規範等,這個時候,你可以研究Effective C++,Google C++ Code Standard等,只有自己犯了錯,回過頭反省才會更加深刻。

隨後,你可以更加深刻的去思考C++,你需要閱讀【The Design and Evolution of C++】。這本書的閱讀,會教會你很多,是對你影響最大的C++書籍。如果你對C++編譯器的一些細節有興趣,深入C++物件模型可以推薦。如果你對STL的一些實作有興趣,可以去翻翻STL原始碼(很多人推薦STL源碼剖析,但是我沒有閱讀過,我沒有辦法發表是否應該推薦的觀點,列出來供你自行判斷是否應該閱讀)。

到這一步驟,我想你應該可以稱為C++ Programmer了,剩下的就是實踐中發現問題,然後補足自己。

此外,由於C++博大精深,套用的範圍多如牛毛,特定方向所需要的知識未列舉。比如你要研究Android的NDK什麽的,那就是屬於你後面的事情了。

===================Update============================================

說實話,我也不知道這一條為什麽突然火了,發現突然有很多的贊。其實正如第一句而言,這是我走過來的經驗,我不能說這就是權威的(甚至不能說是正確的),而當初回答這個問題也是以我走過來的經驗來回答一個初學者的困惑。而這位初學者的困惑在我大一的時候也出現過,所以一下就引起了我的共鳴,我也只想把我的經驗說出來希望可以幫助提問者少走一些彎路而已。至於這樣學習的C++夠不夠,我想我按照這樣的路線學習,可以做到我有能力去IBM寫C++編譯器,那麽我想對於就單純題主所提的C++語言方面來說應該已經足夠了。誠然,電腦的世界不僅電腦程式語言,與之相關的還有作業系統、數據結構、編譯原理、電腦網絡等知識,但是,我想我們可以再開另外一個問題。同時,既然別人問了如何學C++,你讓別人學Java、Python等,或者說C++大坑的,我覺得這種回答其實挺不好的,因為別人問什麽,你老實認真答什麽就好了,何必把自己的意願加在別人的身上呢。