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

? 從圖中可以看出,C++的排名相對于Python、Java、C來說并不突出,很大的原因是因為C++難度過大,也可以說是知識點太多,我們很難說能精通C++這門語言,只能說對它的部分了解,并能在作業中使用;
C++相關網站推薦
1、cppreference.com:這是一個C++最具權威的百科全書,但只有英文模式,相信大家可以看懂的;
2、Compiler Explorer (godbolt.org):在線代碼編輯,可以直接生成匯編代碼,可選擇不同的編譯器和版本,功能強大;
3、C++ Insights (cppinsights.io):一個可以將C++代碼及逆行翻譯的網頁,具體化代碼高級功能;
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)等編譯器還存在差異;
C++特性說明
下面通過具體案例來說明上面列出的點
1、與底層硬體緊密結合
打開網站: https://godbolt.org/z/xPq6e9
運行其中的案例可以發現,輸出的數從大到小;

? 其實在硬體底層,存放記憶體的地址分為大端法和小端法,而C++可以很好的適應不同硬體的存盤方式,這樣有助于提升性能,相比來說,JAVA就不考慮這些,導致資料存放到記憶體還需要再做一些處理,會增加一定的時間;
2、物件生命周期的精確控制
? 這里我們使用C++與C#做比較,對于C#而言,使用完一個物件并不用關注銷毀,底層會自動進行銷毀(垃圾回識訓制);而C++從物件的創建、使用到銷毀都需要使用者自己執行,不需要系統額外參考機制;這里有兩個需要平衡的點,也就是易用和性能,這兩者是有一定取舍的;
下面是C++和C#對于例外的處理方式:
C++:

C#:

造成這處理例外不同的原因就是生命周期精確控制引發的,Finally主要是用來顯式銷毀物件;
對生命周期的精準控制的好處:能夠及時釋放資源,并且不需要額外資源(執行緒)進行垃圾回收,提高了性能;
3、Zero-Overhead Abstraction
主要包含以下兩點:
- 不需要為沒有使用的語言特性付出代價
例如虛函式,或者說在堆或堆疊構造物件,可以通過這個例子來理解:Compiler Explorer (godbolt.org)
- 使用一些語言特性不等于付出運行期成本
可以通過這個例子來理解:Compiler Explorer (godbolt.org)
我們呼叫函式并沒有付出函式中的運行成本,這也是由于函式在編譯期執行;
? 本次為C++的一個開篇,重點是更好的理解C++相對于其他編程語言的一個特性,之后會持續更新,本次專欄計劃是掌握C++的基礎語法以及常用特性,并且從細節上去理解;
轉載請註明出處,本文鏈接:https://www.uj5u.com/qita/350842.html
標籤:其他
