Java程序員如何高效而優雅地入門Cpp,因爲工做須要,須要用C++寫一些模塊。關於C++ 的知識結構,雖然說我有過快速學習不少新語言的經驗,但對於C++ 我也算是老手,但也還須要心生敬畏,本文會從一個Java程序員的角度,制定高效學習路線快速入門C++ 。Java是爲了就業,C++ 是信仰。(C++ 是教學、信仰、商業這三個本來互斥的概念(這三個概念也是三個階段,正好能夠陪咱們一塊兒成長)的恰恰集合體)。程序員
關於C類語言的基本思想,能夠爲學習C++ 定下基調。下面經過斯特魯普(C++發明者)對Java程序員的字字珠璣的建議,再加上個人理解和總結,列出幾點「中心思想」。不要試圖用C++ 來編寫Java程序。不能依賴垃圾收集器了。同爲面嚮對象語言,但要採用C++ 本身的抽象機制【類和模板】。
要理解C++ 與C語言是各個方面都不一樣的程序設計語言(雖然最先C++ 是做爲「帶類的C」出現的),不要由於虛假的熟悉感而將代碼寫成C。
C++ 標準庫很重要很高效,要很是熟悉。
C++ 程序設計強調富類型、輕量級抽象,但願能細細體會。
C++ 特別適合資源受限的應用,也是爲數很少能夠開發出高質量軟件的程序設計語言。
C++ 的成長速度很快,要與時俱進。
必定要有單元測試和錯誤處理模型。
C++ 將內置操做和內置類型都直接映射到硬件,從而提供高效內存使用和底層操做。
C++ 有着靈活且低開銷的抽象機制【核心掌握】(可能的話以庫的形式呈現),而不是簡單的如Java同樣上來就給全部類創造一個惟一的基類。
儘可能不使用引用和指針變量,做爲替代,使用局部變量和成員變量。
使用限定做用域的資源管理。
對象釋放時使用析構函數,而不是模仿finally:避免使用單純的new和delete,應該使用容器(例如vector,string和map)以及句柄類,(例如lock和unique_ptr)使用獨立函數來最小化耦合,使用命名空間來限制獨立函數的做用域。
不要使用異常規範。
C++ 嵌套類對外圍類沒有訪問權限。C++ 提供最小化的運行時反射:dynamic_cast和type_id,應更多依靠編譯時特性。零開銷原則,必須不浪費哪怕一個字節或是一個處理器時鐘週期(C++ 是信仰)。
C++ 是系統程序設計語言(例如驅動程序、通訊協議棧、虛擬機、操做系統、標準庫、編程環境等高大上有技術深度的系統),而Java是業務開發語言(例如XXX管理系統,電商網站,微信服務號等基於B/S架構的上層UED相關的應用),高下立判(鄙視鏈是有道理的)。算法
學習C++ 最重要的就是重視基本概念(例如類型安全、資源管理以及不變式)和程序設計技術(例如使用限定做用域的對象進行資源管理以及在算法中使用迭代器),但要注意不要迷失在語言技術性細節中。
學習C++ 必定要避免深刻到細節特性中去浪費掉大量時間,瞭解最生僻的語言特性或是使用到更多數量的特性並非什麼值得炫耀的事情,尚學堂•百戰程序員陳老師指出學習C++ 細節知識的真正目的是:在良好設計所提供的語境中,有能力組合使用語言特性和庫特性來支持好的程序設計風格。編程
因此,使用庫來簡化程序設計任務,提升系統質量是很是必要的,學習標準庫是學習C++ 不可分割的一部分。(遇到問題先找庫,這一點我想每一個Java程序員骨子裏都是這麼想的,不會鑽到細節中去。)領悟編程和設計技術比了解全部細節重要的多。而細節問題不要過度擔憂,經過時間的積累,不斷的練習天然就會掌握。安全
Java程序員如何高效而優雅地入門Cpp,C++ 除了標準庫之外,有大量的標準庫和工具集,如今有數以千計的C++ 庫,跟上全部這些庫的變化是不可能的,所以仍是上面那些話,要經過組合使用個語言特性以及庫特性來支持好的程序設計風格,因此熟悉這些庫的領域(沒必要鑽進去一一研究)以及領悟編程設計技術纔是核心點。
微信