• <del id="a8uas"></del>
    • 千鋒教育-做有情懷、有良心、有品質的職業教育機構

      400-811-9990
      手機站
      千鋒教育

      千鋒學習站 | 隨時隨地免費學

      千鋒教育

      掃一掃進入千鋒手機站

      領取全套視頻
      千鋒教育

      關注千鋒學習站小程序
      隨時隨地免費學習課程

      上海
      • 北京
      • 鄭州
      • 武漢
      • 成都
      • 西安
      • 沈陽
      • 廣州
      • 南京
      • 深圳
      • 大連
      • 青島
      • 杭州
      • 重慶
      當前位置:合肥千鋒IT培訓  >  技術干貨  >  java/Python這么火,c++這么難,為什么我們還要選擇用C++?

      java/Python這么火,c++這么難,為什么我們還要選擇用C++?

      來源:千鋒教育
      發布人:xqq
      時間: 2023-10-17 22:02:41

      一、為什么我們還要選擇用C++

      C++ 可算是一種聲名在外的編程語言了。這個名聲有好有壞,從好的方面講,C++ 性能非常好,哪個編程語言性能好的話,總忍不住要跟 C++來單挑一下;從壞的方面講,它是臭名昭著的復雜、難學、難用。

      不管說 C++ 是好還是壞,不可否認的是,C++仍然是一門非常流行且非常具有活力的語言。繼沉寂了十多年,并終于發布語言標準的第二版——C++11——之后,C++以每三年一版的頻度發布著新的語言標準,每一版都在基本保留向后兼容性的同時,提供著改進和新功能。

      C++ 程序員應該都聽到過下面這種說法:

      C++ 是一門多范式的通用編程語言。

      多范式,是因為 C++ 支持面向過程編程,也支持面向對象編程,也支持泛型編程,新版本還可以說是支持了函數式編程。同時,上面這些不同的范式,都可以在同一項目中組合使用,這就大大增加了開發的靈活性。因此,C++ 適用的領域非常廣泛,小到嵌入式,大到分布式服務器,到處可以見到 C++ 的身影。

      下面是一些知名的用到 C++ 的場合:

      -大型桌面應用程序(如 Adobe Photoshop、Google Chrome 和 Microsoft Office)

      -大型網站后臺(如 Google 的搜索引擎)

      -游戲(如 StarCraft)和游戲引擎(如 Unreal 和 Unity)

      -編譯器(如 LLVM/Clang 和 GCC)

      -解釋器(如 Java 虛擬機和 V8 JavaScript 引擎)

      -實時控制(如戰斗機的飛行控制和火星車的自動駕駛系統)

      -視覺和智能引擎(如 OpenCV、TensorFlow)

      -數據庫(如 Microsoft SQL Server、MySQL 和 MongoDB)

      有些朋友可能會覺得,這些應用場景似乎和平時的開發場景有點遠啊!你的感覺是對的。有些傳統上使用 C++ 的場合現在已經不一定使用 C++,最典型的是個人電腦上的桌面應用。以前 Windows 下開發桌面應用常常用 MFC,微軟的 C++ 框架,而現在我估計聽說過 MFC 的程序員都不多吧。目前很流行的 Visual Studio Code 主要是用 TypeScript 寫的,不是 C++。而我自己也用 C# 寫過桌面應用,不過界面邏輯之外的計算和處理仍然是用一個 C++ 的 DLL 來完成。典型情況是,需要性能的組件用 C++ 來寫,整個應用程序融合多種不同的語言。

      前面我提到了, C++ 的傳統領域有被侵蝕的風險,那是因為和它相競爭的語言遠遠不止一個,可以說是上下夾攻。

      -如果專注性能和最小內存占用的話,C 仍然是優選——嵌入式領域用 C 非常多,而 Linux 也是用純 C 寫的。

      -如果專注抽象表達和可讀性的話,那 Python 之類的腳本語言則要方便得多。

      -圖形界面(GUI)編程傳統上是 C++ 的地盤,但近年來 C# 和 JavaScript 占領了很大一部分市場。

      -游戲算是 C++ 的經典強項了,但有了 C++ 寫的游戲引擎,游戲用 C# 寫也沒啥問題了——你可能不一定知道,Unity 游戲引擎上的優選開發語言是 C#,而王者榮耀是用什么游戲引擎呢?答案正是 Unity——所以王者榮耀可以認為是用 C# 開發的。

      -還有,Go 和 Rust 也加入了戰團,對 C++ 形成了一定的競爭……

      不過,真是這樣嗎?我們需要回到 C++ 的核心競爭力上來看一下。

      抽象能力:意味著較高的開發效率,同時,更重要的是,不會因抽象而降低性能。

      性能:這不用多說了,就是快并且占用資源少。

      功耗:這是近年來我們越來越關注的問題,跟性能直接相關,性能好了功耗自然就低。

      計算機在發明的初期,價格奇高,而性能拿今天的標準來看卻是極低的,自然不能不關注性能。慢慢地,計算機的性能“足夠”了,性能似乎也就不那么重要了,腳本語言于是也有了用武之地。而隨著移動設備的普遍使用,大量設備用電池供電而不接電源了,功耗就逐漸成了我們大家關注的大問題。因此,即使主流移動平臺的開發語言不是 C++——而是 Java 和 Objective-C 或 Swift——但任何性能要求高的應用,都幾乎必然會用到 C++ 開發的組件。

      同時,移動設備要聯網,也大大刺激了服務器的增加。在服務器端,雖然沒有電池電量的問題,但有著服務器集群的供電問題、空調問題、需要的服務器數量問題等,因而 C++ 的使用也是非常廣泛的。前面說到了王者榮耀的客戶端是用 Unity + C# 開發的,但我沒有說王者榮耀的服務器端——那可還是用 C++ 開發的。另外,有一點我前面還藏著呢!雖然王者榮耀初期是純用 Unity 開發的,沒有用到 C++;但后來,騰訊又用 C++ 把游戲的邏輯部分獨立成了一個 GameCore,進一步提高了性能 。

      目前,跟 C++ 定位差不多、能有直接競爭關系的,也就是既支持高度抽象、又追求高性能的通用編程語言,其實只有 Rust 一種。而 Rust 遠沒有達到跟 C++ 一樣的成熟和普及程度。這也可以從 TIOBE 的排名看出來:C++ 是第 4 位,而 Rust 是第 25 位 。

      另外,和 C 的兼容性,也是 C++ 的一大優勢。雖然現在很多大型程序都混雜了多種語言,但在小項目里,減少語言的數量可以簡化開發和部署。前不久,我在 Python 里做了一些加解密運算,發現使用的第三方庫性能仍不夠高,雖然它已經用了 C 開發的加解密引擎。所以,我找了用 C 寫的高性能加解密代碼,然后使用 pybind11 庫 ,只手寫了一百來行的 C++11 代碼,就把性能又提高了幾倍。

      延伸閱讀:

      二、如何學習 C++

      作為很多聰明人使用過的語言,C++ 在某些場合也可能被用來炫技,寫出除了本人之外誰都看不懂的高抽象代碼。這恰恰是 Bjarne 想努力抵制的方向。他想讓 C++ 對初學者變得更為友好,也明確提出過,他不希望 C++ 是一種讓人們耍機靈的語言,而是一種讓人們更易于使用的語言 。

      這同樣也是本專欄的一個目標:我希望你能把 C++ 當作一種實用的語言,能用它寫出抽象但自然的代碼,而非佶屈聱牙、難以卒讀的那種。希望我 30 年的 C++ 經驗能夠給你一點幫助。

      學習 C++ 語言就像學一門活躍使用中的外語,你不要期望能夠掌握所有的單詞和語法規則——那對于世界上 99.999999% 的人來說是不可能的。但語言是服務于人的,語法規則也是服務于人的,是為了讓人們能夠更好地溝通和表達。雖然 C++ 的每一個新標準都是讓語言從定義和規則的角度變得更復雜,但從用法上來說,新標準允許人們能夠更簡單地表達自己的計算意圖。跟學外語一樣,我們需要的是多看多寫,掌握合適的“語感”,而不是記住所有的規則。

      **Bjarne 有一個洋蔥理論:**抽象層次就像一個洋蔥,是層層嵌套的。如果想用較低的抽象層次表達較高的概念,就好比一次切過了很多層洋蔥,你會把自己的眼淚熏出來的。與這個思路相反,教 C++ 往往有一種不好的傾向,從那些瑣碎易錯的底層教起,自底向上,使得學生常常在尚未領悟到抽象的真諦之前就已經被 C++ 的復雜性嚇翻,從入門到放棄;或者,在學了基本的 C 語法和 class 之后就滿足了,錯過了高級抽象帶來的全新境界。他主張學習應當自頂向下,先學習高層的抽象,再層層剝繭、絲絲入扣地一步步進入下層。如果一次走太深的話,挫折可能就難免了。

      聲明:本站稿件版權均屬千鋒教育所有,未經許可不得擅自轉載。

      猜你喜歡LIKE

      web前端會用到哪些軟件工具?

      2023-10-17

      java/Python這么火,c++這么難,為什么我們還要選擇用C++?

      2023-10-17

      app開發的制作為什么報價和開發周期都不一樣?

      2023-10-17

      最新文章NEW

      對數量龐大的照片進行分類管理,較好的方便檢索的方法是什么?

      2023-10-17

      PHP中的interface有什么用處?

      2023-10-17

      PHP有哪些運行環境?

      2023-10-17

      相關推薦HOT

      更多>>

      快速通道 更多>>

      最新開班信息 更多>>

      網友熱搜 更多>>