C++最大的敵人是它的過去
英文原文:The first enemy of C++ is its past.
C++是一門嚴謹的編程語言,但在指針使用、內存分配問題上因為較為復雜的特性讓很多人望而卻步。隨著 C++ 標準的逐漸完善,現代 C++ 的出現解決了以前的許多問題,但是 C++ 的復興之路還任重而道遠…
在過去的幾年里,我們談到了關于“C++的復興”。我們不得不承認微軟是這項運動中主要參與者,我記得在 Craig Symonds 和 Mohsen Agsen 在視頻中提到了這件事。
在 2011 年,微軟寫了許多文章來宣布 C++ 的回歸,并且眾多微軟專家如 Herb Sutter 在很多會議上解釋了為什么 C++ 會重新崛起,主要原因是現代 C++ 的推廣使用。而同一時間。C++11 標準的認可使我們重新把 C++ 作為一門新的語言來討論。
然而,截至到 2011 年,C++已經有超過 30 年的歷史了。因此,讓開發人員相信關于新的 C++ 已經簡化了過去許多令人失望的用法,而是使用了一種改進了 C++ 代碼的全新方法不是一件容易的事情。
讓我們以內存管理為例,這也許是 C++ 中最受爭議的地方。多年來,對象的分配是通過 new 這個關鍵字來完成,開發者必須牢牢記住在代碼中某些地方調用 delete。“現代的C++”解決了這個問題并推進了共享指針的使用。
但是,關于現代 C++ 的推廣光靠活躍的 C++ 社區和知名專家是不夠的。有一句諺語是:“習慣成自然。”當你努力向某些人推介某個語言或者工具,他有可能覺得你有道理但是卻不會照著你想的做。
這就是在 C++ 上發生的事情,我們中的許多人仍然堅持使用 new 和 delete,而這種影響還要持續很多年,而且許多非 C++ 的開發者也會一直通過調用復雜的內存分配方式來使用這門語言。
C++的過去影響了很多東西甚至從項目的創建之初,許許多多的開發者仍然認為這門語言非常復雜。
C++的過去是如何在影響著它?
為了發現這點,我們來做一個測試,我們在網絡上使用 baidu 搜索“C++對象分配”,查找第一個鏈接便是“C++中是怎樣分配堆對象的?唯一的方法就是用 new…”。這很令人吃驚,而搜索頁前面談論共享指針、智能指針的文章幾乎沒有。
另一個有趣的測試是到到任何大學的圖書館去找一本關于 C++ 的書,去閱讀關于對象分配的那一章節,你基本上不會找到關于“共享指針、智能指針”的介紹。
而 C++ 開發者想要了解它們,一般查找的資源是來自于“C類”而不是現代C++。
如何預防 C++ 的過去所帶來的影響?
這里并沒有特別有效的解決方案。我們可以希望 C++ 編譯器通過發出一些關于最新更新的啟用和棄用警告,就象過去的字符串操作一樣(strcpy、strcat…),但這個解決方案也不是根本的解決之道。現代 C++ 新技術的推動需要學習和實踐。
另外一個解決方案是將“C++”更名為“現代C++”,這個解決方案很簡單也很有趣。在網絡上搜索“現代C++”,那么在我們談論的現代 C++ 的對象分配問題上,第一個鏈接就談論了“智能指針”。
因此,在未來的 C++ 推廣之路上,我們可以提醒新的 C++ 開發者,在網絡上查找關于 C++ 的資料時,“現代C++”和“C++”會是兩個非常不同的搜索結果,前者代表 C++ 的最新用法,而后者只代表過去。
轉載請注明“文章轉載自:慧都控件網”和原文地址 http://www.evget.com/article/2014/12/1/21882.html