看過編程語言排行榜的都知道,C/C++ 自02年以來,無論時代如何發展,其排名一直在前五之內,足見其在編程語言界的地位。編程
編程界流行這麼一句話:c#
C幾乎什麼都能作,C++幾乎什麼都能作好,足見其功能的強大。windows
你們都知道C++徹底兼容C,C++是C語言的加強版,若是沒有學習過C語言或者先學習的其餘語言,好比c#,再學習C++就會以爲好難呀,那麼C++相比其餘語言到底難在哪裏呢?網絡
C++ 是上世紀80年代的發明,算是比較古老的了,在長期的發展中,存在大量的歷史問題,在解決某個問題時,面臨的選擇太多,爲了兼容之前的代碼和之前的規範,不得不使整個系統複雜龐大。編程語言
咱們知道不少語言背後都有一個團隊在運營,好比微軟的C#、甲骨文的Java、谷歌的Go,再看C++,它不隸屬於任何一個團隊,它沒有惟一的編譯器開發商,微軟的msvc、Linux的g++,還有clang等等;函數
這麼多廠商,誰也不佔主導地位,誰也不聽誰的,最後只能成立一個C++標準協會,你們協商着來,相互妥協,這種相互妥協,致使C++變得異常複雜,既兼容這個又兼容那個,迄今爲止沒有一個公認的嚴格的C++規範,C++是很是自由的,而自由也意味着難度大性能
當咱們一提到C/C++,大概首先可以想到的就是指針,指針是C/C++的精髓,一樣也是難度的根源之一;學習
像Java、Python等不少編程語言是沒有指針的,由於他們的虛擬機或者解釋器自帶垃圾回收機制,編程者徹底不用操心內存回收的問題;spa
而C/C++在使用完申請的內存空間以後,又要回收,最多見的問題就是忘了回收或者其餘變量正在引用就提早回收了;scala
而帶垃圾回收的語言,編程者根本不須要操心這些事,徹底不須要知道內存是如何分配的,該誰來回收以及如何回收;
自動垃圾回收有利有弊,利是對開發者簡單,弊是運行效率相對低下,C/C++ 是注重運行效率而犧牲了簡單性。
上面說了這麼多,強調的都是背後緣由,那具體說來,到底C++難在哪裏呢?
相比Java、C#、Python、PHP、JavaScript、Go、C、R、scala、F#...
在純語法上,和C++的難度徹底不在一個量級,而說C++簡單的,大概都是剛畢業沒幾年,只玩過C++而不知道其餘語言的,好比複雜的const和static語義,指針運算,取地址運算、模板、多態、構造函數、繼承等等。
相對來講,C++主張從輪子造起,第三方庫不是太多,不少看似簡單的功能都得本身實現或者拼命的找庫;
通常來講,C++使用的時間長了,就會掌握的更好,由於能夠不斷積累庫函數。
沒有哪種語言是絕對好絕對很差的,都各自都各自的優點和劣勢;
C++是一種很是靈活的語言,具備撰寫高性能代碼的能力,幾乎覆蓋了咱們可以想到的全部的領域,包括航空航天、半導體和設備驅動等等;
而C++除了性能優點,也很是的穩定,20年前的代碼如今依然可使用。
最後,無論你是轉行也好,初學也罷,進階也可,若是你想學編程~
——【值得關注】個人 C/C++編程學習交流俱樂部!——
涉及:C語言、C++、windows編程、網絡編程、QT界面開發、Linux編程、遊戲編程、黑客等等......