工作8年的C++大佬說:C++就應該這麼學!
C ++回到今天
在1999年我去大學之前學習的時候,C ++就是狂野的西部。令人困惑的語法,重度類c指標使用,並且很難除錯。小編c++學習群825414254獲取c++一整套系統性的學習資料還有數十套pdf
如果你足夠幸運地得到你的應用程式編譯,你會發現除錯和測試是一場噩夢。API和平臺之間幾乎沒有一致性。哦,我提到我們剛剛有56K撥號調變解調器,所以沒有谷歌或Stack Overflow可以讓你即時訪問你需要學習的所有幫助嗎?
干預年
Java從1999年開始佔據主導地位。這是整整一代英國電腦科學家學到的東西 - 從命令列工具建立到UI程式碼,螢幕共享應用程式,再到使用EJB和Servlet的企業應用程式開發(這些都是非常詳細的文件記錄)當時我的MarkLogic同事Jason Hunter!)。
Java在語法上比C ++簡單得多。它有自己的記憶體管理並通過指標而不是值傳遞。它有一個跨平臺的API,可以滿足您所需的一切。後來,通過Java Community Process添加了用純Java編寫的擴充套件 - 從而跨平臺編寫。
慢慢地,隨著時間的推移C ++ - isms悄悄回來。型別化的集合迴應了C ++標準模板庫(STL)。程式設計師需要更多的力量。一些異教徒甚至希望他們具有C ++的強大功能和效能以及Java的簡單性。
為了公平對待Sun Microsystems,現在是Oracle,他們在應對這方面做得非常好。Java一直堅持企業應用程式堆疊,從未用於系統程式設計(無論如何都在行動電話之外),瀏覽器中的applet因安全問題而死亡,而UI中的Java現在幾乎與基於Eclipse的IDE同義,而不是純Java Swing。
同時,對快速,機器程式碼編譯,輕量級語言(如C ++)的需求經受住了時間的考驗。
現代C ++
我必須承認,雖然我知道20多種計算機語言但迴歸C ++的想法讓我充滿了恐懼。更糟糕的是,我正在開發的專案也需要API的C包裝器!哎喲!
與此同時,C ++已經更加有效地標準化並且不斷髮展。
標準組織認可了開發人員對Java的喜愛。各種低階作業系統安全問題意味著對語言創新的需求增加,以實現安全性並防止由於誤用語言功能而導致的錯誤。
Smart Pointers絕對是一個神奇的天賜之物。當std :: unique_ptr <SomeType>物件作為變數的物件超出範圍並被銷燬時,它將刪除其包裝指標所使用的記憶體。非常類似於Java,但沒有垃圾收集的延遲。
std :: shared_ptr <SomeType>物件將此擴充套件到多個物件可能具有對指標的引用的位置。非常像Java的參考。
沒有更多懸掛指標 - 正確使用時。
具有一致性的迭代器以及使用STL模式定義自己的迭代器是一個值得歡迎的補充。更好的是,可以針對集合類的成員執行獨立於集合的聰明演算法。這些庫的數量不斷增加。
移動語義,我仍然試圖讓我的頭腦 - 但它消除了舊的C ++程式設計習語的許多物件建立 - 複製 - 破壞開銷。這真的讓程式碼飛了起來 - 但需要一點點讓你的頭腦!特別是通用引用 - 即移動建構函式的方法:MyClass :: MyClass(const SomeType && other);
甚至還有std :: function <ReturnType(CallParamType1,CallParamType2,...)>函式指標包裝器。
Boost庫的工作有效地為語言特性建立了新的思想,最流行和最有用的思想成為下一個ISO C ++標準的一部分。
我們在2011年對C ++ 11進行了重大修訂。這引入了上述許多語言功能,並對其進行了標準化。STL現在也是語言的一部分,並且普遍存在。STL並不覺得這種語言被黑客攻擊,而是它的核心部分。
最佳實踐也已形成併成為硬性規則。Scott Meyers的有效現代C ++ (像語言大師這樣的Jason Hunter!)是一本書的重寫,是我個人的C ++習語和最佳實踐。
此外,Martin Reddy的API Design for C ++ 必須是關於API設計主題的最佳書籍 - 對於任何語言 - 我都讀過。我強烈建議任何電腦科學家,特別是那些即將開始大學...(你知道你是誰!)
通過實際例子,這些難以學習的課程非常容易理解和學習。這些示例清晰簡潔 - 它們不會嘗試教您C ++,而是更正確地使用它。因此,任何有經驗的程式設計師都可以很容易地使用它來獲取或重新學習C ++,就像我一樣。
感謝這些經驗和這些書籍,我學到了建立自己的C ++ API所需的最佳實踐。這是MarkLogic的MLCPlusPlus客戶端API專案 。我還沒有完全在那裡,但他們已經允許我應用現代C ++ 11功能並建立一個非常高效能的API。
我通過繼承最佳實踐,迭代器模式,非同步任務執行和同步,簡單的API設計,甚至使用SWIG的跨語言繫結,應用了基本結構和類佈局的課程!
我現在不會害怕任何需要C ++的專案......當你意識到我上個月一直在努力的事情時,這是最好的......但是直到2017年才能討論這個問題!
結論
學習C ++。現在。做它!!!
現在這是一種絕對的快樂。我這樣做比Java更有趣。Waaaaaaaay比JavaScript更有趣。
我敢說,比XQuery更有趣。我其實非常喜歡XQuery!
不要誤解我有幾天我想用棍子擊敗編譯器死亡,但這通常是因為我太熱情並且在嘗試應用之前沒有完全理解應用的最佳實踐。從那時起。
C ++現在是一種很好用的語言。與90年代不同的是,非常可預測,一致,並且幾乎不需要任何黑客或變通辦法。
我完全建議你們再次學習C ++,並像我一樣學會喜歡它。