08.16 C++新的東西你是否能接受?從這三點習慣可以看出

前言

C++新的東西你是否能接受?從這三點習慣可以看出

現在很多學習C/C++的同學寫代碼的時候不知道自己寫的是C語言代碼還是C語言代碼。C中有C++, C++中有C。

你還在用原始數組嗎?

針對於如下代碼,想必大家也是非常熟悉亦或是非常熟練了。

C++新的東西你是否能接受?從這三點習慣可以看出

更多C/C++學習資料,請私信我“代碼”,即可獲取

我不明白,為什麼有了vector,很多人寫C++代碼還是要去用原始的數組呢?(某些原因用不了vector?)

vector的好處

C++新的東西你是否能接受?從這三點習慣可以看出

更多C/C++學習資料,請私信我“代碼”,即可獲取

  • 定義即可初始化 上面第一行和第二行很明顯可以用一句 std::vector b(256, 0) 替代,意思簡單明瞭。上面memset是不是很容易就寫成了memset(b, 0, 256)了呢?
  • vector變量中帶有size長度,循環時不容易越界。
  • vector及其方便的改變長度(resize)。而原始數組如果長度不夠,那得重新定義一個,然後手動copy到新的數組中,簡直麻煩到死了。如果對其封裝一下,那實際上又幹了一次vector乾的事情。

當然vector功能不僅僅如此,但是這次我是討論是替代原始數組的所帶來優勢。

上段代碼可以替換如下:

C++新的東西你是否能接受?從這三點習慣可以看出

更多C/C++學習資料,請私信我“代碼”,即可獲取

你還在使用函數指針嗎?

很遺憾,C語言在設計的時候,函數並不是設計為第一類值。C++一開始也沒有,但自從boost::function(已加入標準庫,現在為std::function)出現之後,C++中函數已經基本可以充當第一類值使用了。

C++新的東西你是否能接受?從這三點習慣可以看出

更多C/C++學習資料,請私信我“代碼”,即可獲取

C中函數指針的語法太複雜,C++表示同樣的功能既簡單又清晰。

std::function配合lambda表達式或者std::bind更為強大,C++有了函數閉包的功能

C++新的東西你是否能接受?從這三點習慣可以看出

更多C/C++學習資料,請私信我“代碼”,即可獲取

你還在new指針嗎?

指針是件核武器,殺敵一千自傷八百。有時指針傳來傳去,最後忘記了釋放。智能指針的出現是C++一次飛越。

C++新的東西你是否能接受?從這三點習慣可以看出

更多C/C++學習資料,請私信我“代碼”,即可獲取

配合auto,c++代碼非常簡潔,性能怎麼樣呢?我測試過,上面這段比int*a = new int慢一倍,相比其巨大優點,速度已經足夠快了。

shared_ptr並不是萬能良藥,使用不當會導致更嚴重的後果。例如,內存洩漏工具也無法檢查出來。所以,我認為share_ptr帶來的應該是一種語法上的工具,我們在使用它的時候應該更加理清楚變量的生命週期

C++新的東西你是否能接受?從這三點習慣可以看出

時代在發展,對於我們學習C/C++過程中,一定要取其精華,去糟粕。

更多精彩


分享到:


相關文章: