大家好,這裡是鏈客區塊鏈技術問答社區,鏈客,有問必答!
今天講一講C++這項技術,看看如何精通它!
精通C++是一個艱巨的任務。為什麼C++比別的語言難學這麼多?
結果C++為了不限制你的想法,於是也就變成了現在這個樣子——包含若干範式,大概有面向對象(靈活應用virtual繼承+shared_ptr可以達到java/C#的效果)模板(這裡分兩類,分別為type rich programming和meta programming,區別很大)函數式編程(如今有了lambda,配合<algorithm>文件,簡直無敵了)過程式但是難能可貴的是,這幾種東西在C++混在一起用也是多麼的自然。不過,這需要你花時間去掌控他。
那到底有沒有必要真的學到這個地步呢,我覺得跟你的領域是有關係的。譬如說我,基本上算是人格分裂的,因為:當我搞語言設計和編譯器的時候,我總是會傾向於創造各種小DSL來給自己用,用的都是模板(想想boost的spirit大概就明白我的意思了,雖然我不用它),儘量讓跟我有同樣背景的人一眼能看懂我代碼的意思。
當我做我那個GUI庫(www.gaclib.net)的時候,純粹是用OO和IoC那一套。 當我寫3D渲染程序的時候,我會變成一個為了性能不惜犧牲可讀性的人。當我是不同的我的時候,我當然只會用C++的一部分來完成我當前的這個任務。這好像是多重標準,但是實際上是由於項目本身的性質而定的。
到了這個時候你會覺得,C++真是一門好語言。當你需要為了你的項目放棄不同的部分的時候,C++都能幫你做到。當你需要不同的抽象層次需要不同的性能要求的是,C++還是能夠幫你做到。如果你用別的語言,你最終會發現那個語言只能做某幾類的項目。這是因為,C++能夠自由的讓你放棄某些部分,而別的語言會阻止你放棄某些部分。
為了達到這個層次,你必須進入一個無限接近於精通C++的狀態裡,這個時候你才能收放自如,不被C++社區的各種不同的價值觀所捆綁。倘若你的項目非常大,不同的部分有不同的特徵的時候(什麼,一個沒有遍布全世界的一兩千人寫了20年的程序能叫程序嗎?),就更加需要你有這種本事了。
說到這裡,大家大概都明白精通C++大概是個什麼感覺了吧——大丈夫能屈能伸。