C++基礎概念講述

首先,通過一張最新(2021.11)的編程語言排名圖來瞭解常見的編程語言:

在這裡插入圖片描述

從圖中可以看出,C++的排名相對於Python、Java、C來說並不突出,很大的原因是因為C++難度過大,也可以說是知識點太多,我們很難說能精通C++這門語言,隻能說對它的部分瞭解,並能在工作中使用;

1.C++相關網站推薦

1、cppreference.com:這是一個C++最具權威的百科全書,但隻有英文模式,相信大傢可以看懂的;

2、Compiler Explorer (godbolt.org) :在線代碼編輯,可以直接生成匯編代碼,可選擇不同的編譯器和版本,功能強大;

3、C++ Insights (cppinsights.io) :一個可以將C++代碼及逆行翻譯的網頁,具體化代碼高級功能;

2.C++和C的關系

簡單來說,C++是C語言的擴展,主要有以下兩方面;

首先關註性能方面,這是繼承於C語言的特性:

  • 與底層硬件緊密結合
  • 對象生命周期的精確控制
  • Zero-overhead Abstraction

接著是擴展部分,引入大量特性,便於工程實踐

三種編程范式:面向過程、面向對象、泛型
函數重載、異常處理、引用

最後,C++也是一系列不斷演進的標準集合

  • C++98、C++11、C++14、C++17、C++20、C++23?
  • 語言本身的改進(例如Memory Model、Lambda Expressiomn)
  • 標準庫的改進(auto_ptr、type_train/ranges)
  • C++標準的工業實現(MSVC、GCC、Clang)等編譯器還存在差異;

3.C++特性說明

下面通過具體案例來說明上面列出的點

3.1與底層硬件緊密結合

打開網站: https://godbolt.org/z/xPq6e9

運行其中的案例可以發現,輸出的數從大到小;

在這裡插入圖片描述

​ 其實在硬件底層,存放內存的地址分為大端法和小端法,而C++可以很好的適應不同硬件的存儲方式,這樣有助於提升性能,相比來說,JAVA就不考慮這些,導致數據存放到內存還需要再做一些處理,會增加一定的時間;

3.2對象生命周期的精確控制

​ 這裡我們使用C++與C#做比較,對於C#而言,使用完一個對象並不用關註銷毀,底層會自動進行銷毀(垃圾回收機制);而C++從對象的創建、使用到銷毀都需要使用者自己執行,不需要系統額外引用機制;這裡有兩個需要平衡的點,也就是易用和性能,這兩者是有一定取舍的;

下面是C++和C#對於異常的處理方式:

在這裡插入圖片描述

在這裡插入圖片描述

造成這處理異常不同的原因就是生命周期精確控制引發的,Finally主要是用來顯式銷毀對象;

對生命周期的精準控制的好處:能夠及時釋放資源,並且不需要額外資源(線程)進行垃圾回收,提高瞭性能;

3.3Zero-Overhead Abstraction

主要包含以下兩點:

不需要為沒有使用的語言特性付出代價
例如虛函數,或者說在堆或棧構造對象,可以通過這個例子來理解:Compiler Explorer (godbolt.org)

使用一些語言特性不等於付出運行期成本
可以通過這個例子來理解:Compiler Explorer (godbolt.org)

我們調用函數並沒有付出函數中的運行成本,這也是由於函數在編譯期執行;

到此這篇關於C++基礎概念講述的文章就介紹到這瞭,更多相關C++基礎概念內容請搜索WalkonNet以前的文章或繼續瀏覽下面的相關文章希望大傢以後多多支持WalkonNet!

推薦閱讀: