C++ 讀作“C 加加”,是“C Plus Plus”的簡稱。
顧名思義,C++ 就是在 C 語言的基礎上增加了新特性,玩出了新花樣,所以才說“Plus”,就像 Win11 和 Win10、iPhone 15 和 iPhone 15 Pro 的關系。
C 語言是 1972 年由美國貝爾實驗室開發成功的,在當時算是高級語言,它的很多新特性都讓匯編程序員羨慕不已,就像今天的 Go 語言,剛出生就受到追捧。C 語言也是“時髦”的語言,后來的很多軟件都用 C 語言開發,包括 Windows、Linux、Mac OS、MySQL、Python 等。
但是隨著計算機性能的飛速提高,硬件配置與幾十年前已有天壤之別,軟件規模也不斷增大,很多軟件的體積都超過 1G,例如 PhotoShop、Visual Studio 等,用 C 語言開發這些軟件就顯得非常吃力了,這時候 C++ 就應運而生了。
C++ 主要在 C 語言的基礎上增加了面向對象和泛型的機制,提高了開發效率,以適用于大中型軟件的編寫。
C 和 C++的血緣關系
早期并沒有“C++”這個名字,而是叫做“帶類的 C”。“帶類的 C”是作為 C 語言的一個擴展和補充出現的,目的是提高開發效率,如果你有 Java Web 開發經驗,那么你可以將它們的關系與 Servlet 和 JSP 的關系類比。
這個時期的 C++ 非常粗糙,僅支持簡單的面向對象編程,也沒有自己的編譯器,而是通過一個預處理程序(名字叫 cfront),先將 C++ 代碼“翻譯”為 C 語言代碼,再通過 C 語言編譯器合成最終的程序。
隨著 C++的流行,它的語法也越來越強大,已經能夠很完善的支持面向對象編程和泛型編程。但是一直也沒有誕生出新的 C++ 編譯器,而是對原來 C 編譯器不斷擴展,讓它支持 C++ 的新特性,所以我們通常稱為 C/C++ 編譯器,因為它同時支持 C 和 C++,例如 Windows 下的微軟編譯器(cl.exe),Linux 下的 GCC 編譯器。
也就是說,你寫的 C、C++ 代碼都會通過一個編譯器來編譯,很難說 C++ 是一門獨立的語言,還是對 C 的擴展。
圖:C++ 和C語言的關系
C語言和C++的學習順序
C++ 語法繁雜,是最惡心的編程語言,沒有之一。如果針對沒有任何編程經驗的讀者寫一本 C++ 的書,那將是一項不小的任務,寫出來的書也會非常厚。即使這樣,也僅僅是在講語法。
更重要的是,這些知識你很難全部吸收,會嚴重打擊你的信心,失去學習的興趣。
沒有任何編程基礎的讀者,我建議先從 C 語言學起,不要貪多嚼不爛。有編程基礎的讀者,相信你自己能做出正確的判斷。
學習編程是一個循序漸進的過程,不要期望一口吃個胖子。學習 C 語言,一來是學習它的語法,為 C++ 打基礎,同時培養編程興趣,二來是學習內存、編譯和鏈接,弄清編程語言的內在機理。
每個初學者都經歷過這樣的窘境:已經學習了語法,明白了編程語言都有什么,也按照教程敲了不少代碼,但是遇到實際問題就掛了,沒有思路,不知道從何下手。說白了就是只會學不會用。
究其原因,就是實踐少,沒有培養起編程思維!學習知識容易,運用知識難!
等你熟悉了 C 語言,能編寫出上百行的代碼,就對編程有些概念了。這個時候再去了解 C++ 究竟在 C 語言基礎上增加了什么,你就站在了一定的高度。
從“學院派”的角度來說,C++ 支持面向過程編程、面向對象編程和泛型編程,而 C 語言僅支持面向過程編程。就面向過程編程而言,C++ 和 C 幾乎是一樣的,所以學習了 C 語言,也就學習了 C++ 的一半,不需要從頭再來。
結論
C++ 是在 C 語言的基礎上擴展而來的,可以把 C 語言當成 C++ 的一個部分。
我建議先從 C 語言學起,打好基礎了,再繼續學習 C++。反正學習 C 語言就是在學習 C++,怕什么。