C++相比其他語言到底難在哪里?
看過編程語言排行榜的都知道,c/c++自02年以來,不管時(shí)代如何發(fā)展,其排名一直在前五以內(nèi),足見其在編程語言界的地位。編程界流行這么一句話:c幾乎什么都能做,c++幾乎什么都能做好,足見其功能的強(qiáng)大。
大家都知道c++完全兼容c,c++是c語言的增強(qiáng)版,如果沒有學(xué)習(xí)過c語言或者先學(xué)習(xí)的其他語言,比如c#,再學(xué)習(xí)c++就會(huì)覺得好難呀,那么c++相比其他語言到底難在哪里呢?

一、C++歷史包袱太多
C++是上世紀(jì)80年代的發(fā)明,算是比較古老的了,在長期的發(fā)展中,存在大量的歷史問題,在解決某個(gè)問題時(shí),面臨的選擇太多,為了兼容以前的代碼和以前的規(guī)范,不得不使整個(gè)系統(tǒng)復(fù)雜龐大。
二、C++沒有一個(gè)唯一的大東家
我們知道很多語言背后都有一個(gè)團(tuán)隊(duì)在運(yùn)營,比如微軟的c#、甲骨文的java、谷歌的go,再看c++,它不隸屬于任何一個(gè)團(tuán)隊(duì),它沒有唯一的編譯器開發(fā)商,微軟的msvc、linux的g++,還有clang等等,這么多廠商,誰也不占主導(dǎo)地位,誰也不聽誰的,最后只能成立一個(gè)c++標(biāo)準(zhǔn)協(xié)會(huì),大家協(xié)商著來,相互妥協(xié),這種相互妥協(xié),導(dǎo)致c++變得異常復(fù)雜,既兼容這個(gè)又兼容那個(gè),迄今為止沒有一個(gè)公認(rèn)的嚴(yán)格的c++規(guī)范,c++是非常自由的,而自由也意味著難度大
三、c++沒有完善的自動(dòng)垃圾回收機(jī)制
當(dāng)我們一提到c/c++,大概首先能夠想到的就是指針,指針是c/c++的精髓,同樣也是難度的根源之一,像Java、Python等很多編程語言是沒有指針的,因?yàn)樗麄兊奶摂M機(jī)或者解釋器自帶垃圾回收機(jī)制,編程者完全不用操心內(nèi)存回收的問題,而c/c++在使用完申請的內(nèi)存空間之后,又要回收,最常見的問題就是忘了回收或者其他變量正在引用就提前回收了,而帶垃圾回收的語言,編程者根本不需要操心這些事,完全不需要知道內(nèi)存是如何分配的,該誰來回收以及如何回收,自動(dòng)垃圾回收有利有弊,利是對開發(fā)者簡單,弊是運(yùn)行效率相對低下,c/c++是注重運(yùn)行效率而犧牲了簡單性。
四、c++語法博大精深
上面說了這么多,強(qiáng)調(diào)的都是背后原因,那具體說來,到底c++難在哪里呢?相比Java、C#、Python、PHP、JavaScript、Go、C、R、scala、F#,在純語法上,和c++的難度完全不在一個(gè)量級,而說C++簡單的,大概都是剛畢業(yè)沒幾年,只玩過c++而不知道其他語言的,比如復(fù)雜的const和static語義,指針運(yùn)算,取地址運(yùn)算、模板、多態(tài)、構(gòu)造函數(shù)、繼承等等。
五、第三方庫不多
相對來說,c++主張從輪子造起,第三方庫不是太多,很多看似簡單的功能都得自己實(shí)現(xiàn)或者拼命的找?guī)?,一般來說,c++使用的時(shí)間長了,就會(huì)掌握的更好,因?yàn)榭梢圆粩喾e累庫函數(shù)。
沒有哪一種語言是絕對好絕對不好的,都各自都各自的優(yōu)勢和劣勢,c++是一種非常靈活的語言,具有撰寫高性能代碼的能力,幾乎覆蓋了我們能夠想到的所有的領(lǐng)域,包括航空航天、半導(dǎo)體和設(shè)備驅(qū)動(dòng)等等,而c++除了性能優(yōu)勢,也非常的穩(wěn)定,20年前的代碼現(xiàn)在依然可以使用。