帶你走進真正的C++

C++語言是一種混合型語言(20世紀80年代興起),它保留了C語言所有的優點,同時又增添了面向物件的程式設計機制,我們可以將C++語言視為C語言的改進和擴充套件。

帶你走進真正的C++

比你優秀的人都在努力,你還在猶豫什麼呢?

基於C語言開發的C++語言相容C語言,因此用C語言編寫的程式基本上可以不做改動地用於C++。相對於C語言,C++語言對C語言的功能做了一定的擴充,同時增添了面向物件程式設計機制。引入面向物件程式設計機制,主要是為了提高開發效率。

這才是真正的C++!

早期C++許多的工作是對於C的強化和淨化,並把完全相容C作為強制性要求。C89、C99中許多的改進正是從C++中所引進。可見,Stroustrup對C語言的貢獻非常之大。今天不管你對C++怎麼看,C++的確擴充套件和進化了C,對C造成了深遠的影響。

2)在C++相容C的過程中遇到了不少設計實現上的麻煩;以及守舊的K&R C程式設計師對Stroustrup的批評。很多人說C++的惡夢惡夢就是要去兼容於C,這並不無道理(Java就乾的比C++徹底得多),但這並不是Stroustrup考慮的,Stroustrup一邊在使盡渾身解數來相容C,另一方面在拼命地最佳化C。

3)C++最大的競爭對手正是C,他的目的就是——C能做到的,C++也必須做到,而且要做的更好。大家覺得是不是做到了?有多少做到了,有多少還沒有做到?

4)對於同時關注的執行效率和開發效率的程式設計師,Stroustrup多次強調C++的目標是——“在保證效率與C語言相當的情況下,加強程式的組織性;能保證同樣功能的程式,C++更短小”,這正是淺封裝的核心思想。而不是過渡設計的OO。

5)《C++演化和設計》這本書中舉了很多例子來回應那些批評C++有執行效能問題的人。C++在其第二個版本中,引入了虛擬函式機制,這是C++效率最大的瓶頸了,但我個人認為虛擬函式就是多了一次加法運算,但讓我們的程式碼能有更好的組織,極大增加了程式的閱讀和降底了維護成本。(注:Lippman的《深入探索C++物件模型》也說明了C++不比C的程式在執行效能低。Bruce的《Think in C++》也說C++和C的效能相差只有5%)

6)這本書中還講了一些C++的痛苦的取捨,印象最深的就是多重繼承,提出,拿掉,再被提出,反覆很多次,大家在得與失中不斷地辯論和取捨。這個過程讓我最大的收穫是——a) 對於任何一種設計都有好有壞,都只能偏重一方,b) 完全否定式的批評是不好的心態,好的心態應該是建設性地批評。

相對運行於虛擬機器語言,C/C++直接以靜態形式把源程式編譯為目標平臺的機器碼。

一般而言,C/C++程式在編譯及連結時可進行的最佳化最豐富,啟動時的速度最快,執行時的額外記憶體開銷最少。

而C/C++相對動態語言也減少了執行時的動態型別檢測。此外,C/C++的執行行為是確定的,且不會有額外行為,也不會有如垃圾收集(GC)而造成的不確定性延遲,而且C/C++的資料結構在記憶體中的佈局也是確定的。有時C++的一些功能會使程式效能優於C,當中以內聯和模版最為突出,這兩項功能使C++標準庫的sort()通常比C標準庫的qsort()快多倍(C可用宏或人手編碼去解決此問題)。另一方面,C/C++能直接對映機器碼,之間沒有另一層中間語言,因此可以做底層最佳化,例如使用內部(intrinsic)函式和嵌入組合語言。然而,許多C++的效能優點並非免費午餐,代價包括較長的編譯連結時間和較易出錯,因而增加開發時間和成本。

這才是真正的C++!

學程式設計最重要的是實踐,就是寫程式碼、看別人寫的程式碼、再寫程式碼,你看再多的書,不寫程式碼,你還是不會程式設計。但是寫程式碼也要講究方法循序漸進,不能剛學了幾天語法,就想寫個作業系統什麼的,樹立這種不切實際的目標只會讓你的自信受到嚴重打擊迷失自我。

感謝大家的支援,後期會分享更多的知識給大家,歡迎大家在評論下方多多評論給予建議。有想要學習或者需要基礎影片的可以在評論區獲取

**總而言之

學會交流,多交流,相互補益,同時團隊合作也是很重要的。

實踐出真知,多學、多練、多思、多交流,勤奮好學才能學成。**

學而不思則罔,思而不學則殆。