長江後浪推前浪、一浪更比一浪強!想專一就選C++!!!噩夢纏身便是學習C++的感覺~~~痛並快樂着~~~

想專一就選C++!!!


不知道什麼時候發生的一個現象,大多數人剛開始學語言,聽到C和C++給人的感覺就不好!

打籃球的女孩最帥

這東西,一聽好像就不是Java、Python時尚、潮流的主。狂拽炫酷┗( ▔, ▔ )┛

我們看看新一代選手的實力:

僅Java和Python用途包括方面好像就已經勝利了/(ㄒoㄒ)/~~

Android & IOS 應用開發,視頻遊戲開發,桌面GUIs(即圖形用戶頁面),爬蟲,Web開發,軟件開發,架構等。

尤其是潮流的方向和大家熟悉的:網站開發、大數據、人工智能等等,

給人的感覺就是這些東西好像和老牌的C\C++一毛錢關係都沒有。

再看c++的缺點與缺陷:

  1. 相對java來說,沒有垃圾回收機制,可能引起內存設漏;
  2. 內容較多較難,學起來相對困難;
  3. 等等(不列舉了,不好意思(ಥ_ಥ) )

而且同樣的功能,Java和Python的代碼量更少,簡潔方便。

這讓很多人覺得花很多精力去了解這樣的老前輩,有何益處???自討苦喫???

長江後浪推前浪

 

讓我們看看老一輩選手的實力究竟如何:

C++是在C語言基礎上開發的一種集面向對象編程(Object Oriented Programming,OOP)、泛型編程和過程化編程於一體的編程語言,是C語言的超集。它是一種令人興奮的語言(End),在C語言的基礎上添加了面向對象編程和泛型編程的支持。學好C++不僅能夠讓你熟悉一種編程語言,還能夠深刻理解編程思維,對於快速上手其他編程語言也是非常有幫助的。

  • C++繼承了C語言高效、簡潔、快速和可移植性的傳統。
  • C++面向對象的特性帶來了全新的編程方法,這種方法是爲應付複雜程度不斷提高的現代編程任務而設計的。它的面向對象編程並不僅僅是將數據和方法合併爲類定義,還有助於創建可重用的代碼,這將減少大量的工作:
    • 信息隱藏可以保護數據,使其免遭不適當的訪問。
    • 多態能夠爲運算符和函數創建多個定義,通過編程上下文來確定使用哪個定義。
    • 繼承能夠使用舊類派生出新類。
  • 方便使用現有的類。設計有用、可靠的類是一項艱鉅的任務。幸運的是,面向對象編程語言使程序員在編程中能夠輕鬆地使用已有的類。廠商提供了大量有用的類庫,包括設計用於簡化Windows或Macintosh環境下編程的類庫。C++真正的優點之一是:可以方便地重用和修改現有的,經過仔細修改的代碼。
  • C++的模板特性提供了另一種全新的編程方法——泛型編程,使得不同的數據類型能夠採用相同的方式來操作。比如,C++可以用同樣的方式訪問vector、list等不同數據結構容器中的數據。
  • 支持大型程序。本質上講,C++是爲大型項目而存在的。當開發中小規模的項目時,C++的優勢可能表現得並不明顯。但當你的項目規模達到了一定程度,並依然對性能要求很高時,C++依然能夠滿足這樣的要求,Java、C#等語言卻可能因爲垃圾回收機制導致響應速度變慢。因此,從項目利益的角度來說,C++語言是非常好的選擇。
  • 應用領域廣。C++在服務器端開發、網絡開發、遊戲開發、計算機視覺(如數字圖像處理)、操作系統等多個領域都有廣泛的應用,常見的有MySQL,VisualStudio,3DMAX等等。

看了那麼多,感覺和自己很遙遠啊!幾十萬高併發高性能的程序?想都沒想過,更別說自己去寫一個編譯器、開發一個新的語言?簡直天方夜譚!想想就感覺做噩夢一樣子!

噩夢纏身便是學習C++的感覺~~~痛並快樂着~~~哈哈哈O(∩_∩)O

噩夢並不可怕,可怕的是我們沒有了信心:定一個目標,走到哪自己說了算!Who Care?

看到要學的東西繁雜,好像就沒有了興趣,看到平時工作也不需要自己做那麼多事,好像就事無觀己,完成自己的就是天下太平。好像35歲之後淘汰的技術生命貢獻者們,也不缺乏技術,爲何沒有人要了呢?表面的東西,總有人比你更厲害,和你一樣厲害的,沒有更大的社會壓力,剛畢業給錢就幹。逼上梁山,轉行大潮∑(っ°Д°;)っ~~~

也不至於那麼悽慘了,剛開始目標沒必要那麼大,雕琢自己的代碼,我個人覺得是一件非常有意思的事情。同樣的功能,優美的字符是那麼的神清氣爽、彷彿就是在給機器賦予生命力(〃'▽'〃)

說到優美的代碼,在這裏磊磊就給大家分享一個:在學STL第一個容器String容器時,關於assign(賦值)函數的定義源碼,真的是讓我非常喫驚。優美到得發個朋友圈祝賀一下下自己發現的新大陸:

這裏給分享一個持續更新的C++STL的詳細教程

讓我對編碼有了全新的認識:

什麼叫嚴謹?什麼叫規範?什麼叫簡潔?什麼叫強大?無法概括

光簡潔不夠強大不夠優雅不行,光強大不夠簡潔不夠優雅不行,光優雅不夠簡潔不夠強大不行

給各位看官也分享一下吧~

如下源碼以及vs裏的截圖:

	basic_string& assign(_In_reads_(_Count) const _Elem * const _Ptr, _CRT_GUARDOVERFLOW const size_type _Count)
		{	// assign [_Ptr, _Ptr + _Count)
		auto& _My_data = this->_Get_data();
		if (_Count <= _My_data._Myres)
			{
			_Elem * const _Old_ptr = _My_data._Myptr();
			_My_data._Mysize = _Count;
			_Traits::move(_Old_ptr, _Ptr, _Count);
			_Traits::assign(_Old_ptr[_Count], _Elem());
			return (*this);
			}

		return (_Reallocate_for(_Count, [](_Elem * const _New_ptr, const size_type _Count, const _Elem * const _Ptr) {
			_Traits::copy(_New_ptr, _Ptr, _Count);
			_Traits::assign(_New_ptr[_Count], _Elem());
			}, _Ptr));
		}

	basic_string& assign(_In_z_ const _Elem * const _Ptr)
		{	// assign [_Ptr, <null>)
		return (assign(_Ptr, _Convert_size<size_type>(_Traits::length(_Ptr))));
		}

	basic_string& assign(_CRT_GUARDOVERFLOW const size_type _Count, const _Elem _Ch)
		{	// assign _Count * _Ch
		auto& _My_data = this->_Get_data();
		if (_Count <= _My_data._Myres)
			{
			_Elem * const _Old_ptr = _My_data._Myptr();
			_My_data._Mysize = _Count;
			_Traits::assign(_Old_ptr, _Count, _Ch);
			_Traits::assign(_Old_ptr[_Count], _Elem());
			return (*this);
			}

		return (_Reallocate_for(_Count, [](_Elem * const _New_ptr, const size_type _Count, const _Elem _Ch) {
			_Traits::assign(_New_ptr, _Count, _Ch);
			_Traits::assign(_New_ptr[_Count], _Elem());
			}, _Ch));
		}

	template<class _Iter,
		class = enable_if_t<_Is_iterator_v<_Iter>>>
		basic_string& assign(const _Iter _First, const _Iter _Last)
		{	// assign [_First, _Last), input iterators
		return (replace(begin(), end(), _First, _Last));
		}

                                  (因爲標準庫的基本都是如此嚴謹、整齊、劃一的風格,就不再贅述了)

看到之後,除了欣賞就是自我檢討+自我檢討:然後好像明白了個事實:我好像只會寫bug!!!!!!

 

 

        /(ㄒoㄒ)/~~

         而且幼稚的像天線寶寶

 

 

 

略微總結:c++在c語言的基礎上增加了不少的內容:

  1. 類型檢查更加嚴格
  2. 增加了面向對象機制
  3. 增加了泛型編程的機制
  4. 增加了函數重載和運算符重載。
  5. 異常處理機制
  6. 標準模板庫STL。

   C++兼容裏c語言的絕大部分內容,但還是有一些差異的,不兼容的,比如c語言允許從void* 隱式轉化爲其他類型的指針,這在c++中是不允許的。

c++的優點:

  1. 代碼可讀性好。
  2. 可重用性好。
  3. 可移植。
  4. C++設計成無需複雜的程序設計環境
  5. 運行效率高,高效安全
  6. 語言簡潔,編寫風格自由。
  7. 提供了標準庫stl
  8. 面向對象機制
  9. 很多優秀的程序框架包括Boost、Qt、MFC、OWL、wxWidgets、WTL就是使用的C++。
  10. 等等

  c++更適合大項目,在大項目中c++是其他言語不可比擬的。做較小的項目,性能可能比不上java等常用主流語言。


End

寫這篇文章就是想對自己以及還在學習C/C++編程路上的你說:不管學習哪種語言、哪項技術、以及從事什麼行業、做什麼工作,每一樣事物都有他的兩面性,我沒有資格去評價任何技術的好壞,更沒有資格去評價事物。但是這些都不重要。重要的是:有一個清晰目標和動力。雖然我們學C/C++的目的不是開發一種語言的編譯器,更不是開發一種新的語言,哪怕只是爲了生活,都不應該放棄自己,應付式的學習,應付式的活着。

當我們發現它的日常工程好像沒有那麼強大,而且它也不是時代的寵兒了,具有發展前景的工作需要,使我們漸漸遠離了過去與我們一同並肩作戰的“朋友”,但當某一瞬間、某一時刻、我們解決問題時才發現原來這些底層都是C++實現,看着那編碼風格:整齊劃一、邏輯嚴謹、沒有一句廢話的代碼,我們就知道其實它一直就陪伴在我們的身邊。

它或許不像Java、Python那麼的高調與時尚,它也或許沒有特別炫酷的功能,也沒有那麼容易去學習,但是它從不抱怨,因爲它的實力毋庸置疑!!!!


所有入坑的選手有一個精彩的人生!!!

坑多,可以逼着你不斷學習
特性多,可以逼着你不斷學習
多編程泛型支持,可以逼着你不斷學習
好處就是,不斷學習,哪裏有時間去學習其他,

想專一就選C++!!!

 

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章