C#程序員的C++學習記錄:一

今天第一篇,就談一些雜感吧

去年下半年開始學習C++的。主要動機來源於個人技術轉型的需要。

個人感覺C++的並不是太難學。或者是因爲我係統底層方面的基礎還行吧。無非就是內部數據類型,對象模型、運行時、庫,以及一些高級特性模板啊,異常處理啊什麼之類的。

大部分東西都和C#是一致的,或者說C#大部分東西都和C++是一致的(由此我也明白了爲什麼C#的某些地方實現得那麼詭異了,原來是爲了和C++保持一致啊),畢竟C++比C#早許多年。以下是一些粗淺的比較:

內部數據類型:從數量上來說都是差不多的:char、short、int、long、float、double等。而且內部數據類型的對象模型上也是一致的,都是內存裏的一個字節串(C#的內部數據類型是不帶有對象類型指針和同步索引塊的)。

對象模型:這方面有比較明顯差異。首先就是上面說的類型對象指針和同步索引塊,這是C#中說有神明偉class的對象的通用結構。個人非常感謝類型對象指針這個東東,C++中雖然也有RTTI,不過這方面我還沒學到家,不好說。另外C#更前強調類型,相比而言C++的類型感就不是那麼強了,不過我認爲強類型帶來的好處和壞處是一樣多的。其他方面感覺差異不大,繼承、虛函數都是差不多的。總的來說兩者同大於異,C++的對象模型基本上是C#的一個超集,但是C#提供了更多的安全保障。

運行時:C#是嚴格基於棧的,C++在這方面有較大的選擇餘地。在對堆得管兩方面兩者C#終於棋高一着了,託管堆、垃圾回收,帶來說說不清的方便啊。不過這也導致了C#更強調使用引用類型,它是甚至強迫所有的class都是引用類型的。我認爲過分使用引用類型也是好壞各半的。當然CLR還提供更多的高級特性,不過這也爲C#帶來了更多的限制(C#不就是這麼設計的麼?)。

庫:這方面太感謝C#了:統一。我實在認爲C++的標準庫太差強人意,不過考慮到他們要考慮可移植性就暫時原諒他們吧。當然我忍不認爲C#的庫沒問題,相反TA問題多多。不過其統一性爲學習和實際項目開發帶來了許多好處。對於C++的庫,我只想說選擇太多有時候實在不是一件好事。

還是說說具體的吧。從標準庫的角度來看,兩者沒什麼明顯的差異。算法、容器、數據結構各有優劣。不過在C#中內存管理的任務已經降到最低了,所以C#的標準庫中木有分配器這個概念,另外C#直接在語言層次支持迭代器。

高級特性就不說了,各有所長。

就學習曲線而言,C++的確比C#要高一些。不過我認爲主要是因爲C++的過於瑣碎和割裂造成的。就拿const關鍵字來說,TA在不同的場合的就非常耐人琢磨,雖然都是爲了表達常量這一概念。還有就是庫的問題,這方面我遇到的第一個問題就是把數字轉成wchar_t指針類型。我知道做到這件事情的方式是挺多的,不過對於一個新手恐怕還必須去網上搜索一下才行吧。將標準庫的書通常都不帶講這個的。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章