我有時閱讀關於爲什麼C++好或壞的討論,有時候其中一個論點引用了今天的現代C++與舊C++非常不同。我想知道究竟會有什麼區別?什麼是'現代'C++的例子,以及這個'舊'C++的例子(最好是做同樣的事情)?什麼是現代C++?
回答
大量使用標準庫和STL,異常和模板 - 而不是隻帶類的C
我想添加元編程 – Anycorn 2010-09-07 19:27:39
@Martin Beckett STL是標準庫的一部分。 – 2010-09-07 19:33:51
@A-ha,STL通常用作一種非正式的方式來引用標準庫的「新」部分。 – 2010-09-07 19:49:44
該Wikipedia page on the upcoming C++ standard是一個不錯的開始閱讀較新的C++。
一個很明顯的區別是,在「舊式」 C++,你會看到new
手動創建和銷燬許多對象與delete
。在現代C++中,儘可能在堆棧上創建一個對象,或者至少包裝在某種智能指針中。
另一個區別是舊式C++更注重面向對象,而現代C++使用多種編程風格:過程式,模塊式,對象式和通用式。在現代C++中,免費函數被認爲是一件好事,然而他們會被推到舊式C++的某些類中。
其他明顯的差異包括使用結構和庫變得足夠成熟和穩定的生產代碼中使用的:模板,異常,命名空間,STL等
「現代」 C++是不害怕使用任何或所有以下內容:
- RAII
- 標準庫容器和算法
- 模板
- 元編程 個
- 例外
- 升壓
「老」 C++傾向於避免這些東西由於明顯缺乏的編譯器的支持或運行時的性能。相反,你會發現...
- 很多
new
和delete
- 滾你自己的鏈表等數據結構
- 返回代碼爲錯誤處理
- 的一個機制數以百萬計的自定義字符串類不是
std::string
與所有這些與那個參數一樣,這兩種方法都有優點。現代C++不是普遍更好。例如,嵌入式環境通常需要大多數人從不需要的額外限制,因此您會在那裏看到很多舊式代碼。總的來說,我認爲你會發現大多數現代功能都值得使用。摩爾定律和編譯器的改進已經考慮了避免新東西的大多數原因。
我認爲*不幸*現代C++不怕例外。不是我不喜歡例外,而是人們濫用它們...... – 2010-09-08 06:23:53
@Matthieu,不幸的是,更多*程序員*當他們應該是時並不害怕他們。 (微軟的)Raymond Chen沒有說過他不夠聰明可以使用它們嗎? – 2010-09-08 11:48:32
我認爲他這樣做是爲了震撼:)但是異常會在代碼中引入跳轉,使得難以執行執行路徑,尤其是因爲這些跳轉是隱藏的。如果保留到真正的特殊條件,那麼它並不重要,但是如果任何調用的操作員可能會失敗,那麼您將處於一個受到傷害的世界(維護方面)。我決定(不久前)儘可能地嘗試和免除程序。畢竟,'find'方法找不到結果是正常的。 – 2010-09-08 13:28:16
在C++中有很多東西都被認爲是現代。
首先,我認爲,模板的出現是非同尋常的。不僅STL本身,而且導致模板元編程開發的模板的「常規」使用也較少。注意例如即將出現的標準版本中enable_if
的存在。
這是最顯着的特點,我認爲中下的運動++程序員誰尋求通過建設執行正確性:
- 喜歡編譯器錯誤運行錯誤>模板/類型安全的,而不是省略號/
void*
- 使用範圍內綁定資源管理(又名RAII,但一點點的更清楚了)
這項研究的高品質,也導致了普遍使用的:
- 的STL(算法和數據結構已被徹底測試,即使STL是由設計相當不安全的不幸)
- Boost庫(由專業程序員審查,準無缺陷,高度便攜)
回顧這些庫也證明了C++程序員不再有對那些面向對象的語言自卑的複雜:現在從這個複雜的解脫出來,我們不要猶豫,混合各種範式(OO,通用,程序)來實現我們的目標。總而言之,我認爲Modern C++更多的是一種心態。我們(C++程序員)試圖從可怕的未定義的行爲中解脫出來,它已經困擾了我們這麼長時間,並試圖釋放我們的用戶(通過定義不允許的接口)。我們也接受其他人來之前的事實,並且重複使用現有的圖書館並不表示軟弱。
更值得注意的是,模板從未打算用於如何使用它們。它不像Stroustrup開始創建一個在編譯時執行的圖靈完備的子語言。 – 2010-09-08 11:46:07
@Kristo:我同意,偶然發現他們形成了Turing Complete語言,我仍然每個月都會發現新的有趣用法(而不是我自己:我確實讀了很多)。更有意思的是,他們在C++中引入了函數式編程習語,因爲C++中類型的內在不變性:) – 2010-09-08 13:30:08
- 1. 什麼是現代的Python
- 2. 現代Java。它是什麼?
- 3. 什麼是迭代器,C++?
- 4. 什麼是C++代表?
- 5. 什麼是C#代碼做:
- 6. 什麼是替代在C + +
- 7. 這是什麼C++代碼試圖實現?
- 8. 什麼是現代?一個平臺?
- 9. 什麼是現代運行時?
- 10. 什麼是推薦的Bcrypt C實現?
- 11. C#中System.load(dll)的實現是什麼?
- 12. 什麼是C#中的「自動實現」?
- 13. 這個C代碼是做什麼的?
- 14. 這是什麼代碼在C#
- 15. 什麼是在Visual Studio的C++代碼
- 16. C#什麼是設置的替代
- 17. 這個vb代碼的c#是什麼?
- 18. C#中代表的用法是什麼?
- 19. 什麼是用C++ RegEx替代lookbehind?
- 20. 這個C++代碼是什麼意思
- 21. 什麼是此代碼的C#等效
- 22. 這個C代碼是什麼意思?
- 23. C代碼,是什麼意思?
- 24. 這段C++代碼是做什麼的?
- 25. 這個c/++代碼是做什麼的?
- 26. 這段C代碼是做什麼的?
- 27. 什麼是目標C的「stringWithContentsOfURL」替代?
- 28. C#中的代表是什麼?
- 29. C++中的代理類是什麼
- 30. 這行C#代碼是做什麼的?
沒有實際的引用或引用,很難確切地知道你在說什麼。你能提供一個鏈接或參考,所以我們知道你讀的是什麼? – 2010-09-07 18:08:08