困難度之一
「c++ 是個難學易用的語言」,這句話相信很多人都心有戚戚。c++的學習難度,一在於語言本身太多的「幕」,另乙個就在於 "paradigm shift" (思考模式的移轉)。
傳統語言如 c, pascal, basic, fortran...,除了模樣看起來稍有不同,基本上都是函式 call 來 call 去,大同小異,很容易掌握。你想做的動作,在 code 中都看得一清二楚。你所看不到的,也不過就是編譯器為你的函式加上用以處理堆疊的一小段碼(prologue 和 epilogue),這一小段碼基本上做的是 housekeeping 工作,你沒看到也沒有關係,並不影響你對程式邏輯的思考。
c++ 不一樣,c++ 有太多和程式邏輯息息相關的動作是編譯器為我們加上去的。換句話說 c++ 編譯器為我們「加碼」。如果不識清這一節,學習c++ 有如霧裡看花,霧非霧,花非花。
編譯器為我們的 c++ 程式加了什麼碼呢?很多!物件誕生時 ctor 會被喚起,物件死亡時 dtor 會被喚起,這都是加碼的結果。ctor 中設定vtpr 和 vtbl,這也是加碼的結果。new 單一物件時會產生 memory block cookie,new 物件陣列時會產生乙個內部結構記錄著 object size 和 class ctor...,這也都是布幕後的工作。可以說,程式碼中看不到而卻必須完成的所有與程式邏輯有關的動作,統統都是 c++ 編譯器加碼後的結果。
當「繼承」發生,整個情況變得稍微複雜起來。「多重繼承」又更複雜一些,「虛擬繼承」又再更複雜一些。
這些布幕後的主題,統可歸類為所謂的 c++ object model(物件模型)。如果不知道這些底層機制,你就只能夠把 "make destructors virtual in base classes"或 "never treat arrays polymorphically"這類規則硬背下來,卻不明白它的道理。用一樣東西,卻不明白它的道理,林語堂如是說:「不高明」。只知道 how,不知道 why。
困難度之二
學習C 程式語言的最大難度是什麼
困難度之一 c 是個難學易用的語言 這句話相信很多人都心有戚戚。c 的學習難度,一在於語言本身太多的 幕 另乙個就在於 paradigm shift 思考模式的移轉 傳統語言如 c,pascal,basic,fortran.除了模樣看起來稍有不同,基本上都是函式 call 來 call 去,大同小異...
想學習C語言,學習路線是什麼?
不知道有多少人去了解過語言的發展史,早期c語言的語法功能其實比較簡單。隨著應用需求和場景的變化,c語言的語法功能在不斷公升級變化。c語言是一種計算機程式語言。它既有高階語言的特點,又具有組合語言的特點。它可以作為系統設計語言,編寫工作系統應用程式,也可以作為應用程式設計語言,編寫不依賴計算機硬體的應...
C語言中的EOF是什麼?
日期 2011年11月12日 我學習c語言的時候,遇到的乙個問題就是eof。它是end of file的縮寫,表示 文字流 stream 的結尾。這裡的 文字流 可以是檔案 file 也可以是標準輸入 stdin 比如,下面這段 就表示,如果不是檔案結尾,就把檔案的內容複製到螢幕上。int c wh...