C++的演化歷史

C++是一門這樣的編程語言:

  • 兼顧底層計算機硬件系統和高層應用抽象機制
  • 從實際問題出發,注重零成本抽象、性能、可移植性、與C兼容
  • 語言特性和細節很多,學習成本較高,是一門讓程序員很難敢說精通的語言

C++是自由的,支持5種編程風格:

  • 面向過程編程
  • 數據抽象編程
  • 面向對象編程
  • 泛型編程
  • 函數式編程

C++的重要歷史階段

縱觀C++的整個發展和演化的歷史,C++經歷了5個重要的時期:

  • C with classes: 站在C語言的肩膀上
  • 標準化前的C++: C++正式問世,不斷演化,走向標準化之路
  • C++98: 第一個國際標準化的版本
  • C++11: Modern C++
  • C++20: 感覺像一門新的編程語言

1979 - 1981: C with classes

  • 在C語言的基礎上,開始了「帶類的C」的嘗試
  • 這個階段的C++沒有被看作是一門新的編程語言,也沒有C++這個名字,只是一個更好的C
  • 這個時期最重要的是引入了Simula語言的類和繼承的概念,使用Cpre預處理器實現
      • class是一種類型擴展機制,可以讓程序員自定義數據類型
      • 用戶自定義的數據類型和內置基本數據類型一樣,是語言的「第一等公民」
      • 權限控制只有public和private,沒有protected
      • 支持構造函數和析構函數
      • 支持調用函數和返回函數
    • 單繼承
    • 內聯函數
    • 友元類
    • 函數參數類型檢查
    • 函數默認參數
    • 賦值運算符重載
    • 支持new和delete運算符
    • 改進了C中不友好的語法
      • 函數形參的類型聲明
      • 結構體變量的定義
  • 早期的指導思想
    • 與C語言兼容
      • C的語言特性均可用
      • 對象的內存布局和C結構體一致
      • 使用和C一樣的鏈接模型
    • 比C語言提供更高層的抽象機制
      • 讓程序員更加容易表達設計意圖和組織更大規模的代碼
    • 性能、可移植性要和C一樣好
      • 不使用垃圾回收機制
      • 實現語言特性的成本不能過高

1982 - 1985: Cfront 1.0

  • 從1982年開始,C++開始定位作為一個新的編程語言,使用編譯技術重新實現了「帶類的C」,對應的編譯器為Cfront
  • 1983年底,C++正式被命名
  • Cfront的工作原理:將C++代碼先通過Cfront翻譯為C代碼,然后通過C編譯器進行編譯和鏈接
  • 這個時期的C++語言特性和「C with classes」一致,主要支持面向過程、數據抽象的編程風格
  • 1985年,Cfront 1.0發布
  • 1985年,《The C++ Programming Language》第一版發布

1986 - 1989: Cfront 2.0

  • 從1986年開始,C++開始引入一些重要的語言特性,讓C++明顯區別于C
    • 虛函數
      • 虛函數的引入,對C++意義重大
      • 讓C++正式支持了面向對象的編程風格
      • 讓程序員有了更強大的設計意圖表達工具
    • 函數和運算符重載
    • 引用
    • const
    • 類級的new和delete運算符重載
    • 改進的靜態類型檢查
    • 引入新的注釋//
    • 多重繼承
    • protected訪問
    • static靜態成員
    • const成員
    • 指向成員的指針
    • 去掉調用函數和返回函數
    • 1987年,C++ support in GCC 1.15.3
    • 1989年,Cfront 2.0發布

1990 - 1993: Cfront 3.0

  • 1990年,《The Annotated C++ Reference Manual》發布
  • 引入了C++高級特性,讓C++作為一個編程語言趨于完善
    • 命名空間
    • 異常
    • 模板
      • 讓C++支持了泛型編程風格
      • 對標準庫STL的實現至關重要
    • 嵌套類
  • 1991年, Cfront 3.0發布
  • 1991年,《The C++ Programming Language》第二版發布
  • 1993年, Cfront退出了歷史舞臺

1998: C++98

  • ISO/IEC 14882:1998
  • C++標準委員會發布了C++語言的第一個國際標準
  • 確定了C++的核心語言特性和標準庫STL
  • 引入的新語言特性
    • 運行時類型識別RTTI
    • mutable
    • bool
    • declarations in conditions
    • template instantiations
    • member templates
    • export
  • 1998年,《The C++ Programming Language》第三版發布

2003: C++03

  • ISO/IEC 14882:2003
  • C++98的修訂版本
  • 引入新的語言特性
    • value initialization

2011: C++11

  • ISO/IEC 14882:2011
  • 正式邁進新時代:現代C++
  • C++也進入了一個新的快速發展期,每3年發布一個版本
  • 2013年,《The C++ Programming Language》第四版發布
  • 引入了很多新的語言特性
    • 類型推導: auto、decltype
    • 右值引用和移動語義
    • 變參模板
    • std::function & std::bind & lambda表達式和后置返回值
    • 智能指針
      • c++11引入了三種智能指針:
        • std::shared_ptr
        • std::weak_ptr
        • std::unique_ptr
    • constexpr
    • static_assert
    • 類機制完善
      • 移動構造函數和賦值運算符重載函數
      • 支持=default和=delete,完善編譯器自動生成函數的控制
      • 支持explicit
      • 委托構造
      • 繼承構造
      • 支持final,完善繼承
      • 支持override,完善虛函數
    • range-for(基于范圍的for循環)
    • enum class
    • nullptr
    • 新增內置數據類型:long long、char16_t、char32_t
    • 類內初始化
    • 統一初始化
    • using定義類型別名
    • noexcept
    • thread_local
    • 列表初始化
    • etc.
  • 完善了標準庫STL
    • 重新實現了STL的數據結構和算法
    • 新增散列表和集合std::unordered_map、std::unordered_set
    • 新增元組std::tuple、單向鏈表std::forward_list、數組std::array
    • 移動函數std::move
    • 完美轉發std::forward
    • 智能指針std::unique_ptr、std::shared_ptr、std::weak_ptr
    • 回調函數std::function、std::bind
    • 多線程std::thread
    • 多線程同步std::mutex、std::condition_variable、std::lock_guard、std::unique_lock
    • 異步任務std::promise、std::future、std::packaged_task、std::async
    • 原子操作std::atomic
    • 時間函數std::chrono
    • 初始化列表std::initialize_list
    • 模板元編程type_traits
    • 正則表達式std::regex
    • 隨機數生成random
    • etc.

2014: C++14

  • ISO/IEC 14882:2014
  • C++11的修訂版本
  • 完善C++11的語言特性
    • variable templates
    • generic lambdas
    • lambda init-capture
    • new/delete elision
    • relaxed restrictions on constexpr functions
    • binary literals
    • digit separators
    • return type deduction for functions
    • aggregate classes with default non-static member initializers.
  • 完善標準庫STL
    • std::make_unique
    • std::shared_timed_mutex and std::shared_lock
    • std::integer_sequence
    • std::exchange
    • std::quoted
    • and many small improvements to existing library facilities, such as
      • two-range overloads for some algorithms
      • type alias versions of type traits
      • user-defined literals for basic_string, duration and complex
      • etc.

2017: C++17

  • ISO/IEC 14882:2017
  • 一個C++11的重要補充版本,引入了不少新的特性
    • 構造函數模板推導
    • 結構化綁定
    • if-switch語句初始化
    • 內聯變量
    • 折疊表達式
    • constexpr lambda表達式
    • namespace嵌套
    • __has_include預處理表達式
    • 在lambda表達式用*this捕獲對象副本
    • 新增Attribute
    • 字符串轉換
    • std::variant
    • std::optional
    • std::any
    • std::apply
    • std::make_from_tuple
    • as_const
    • std::string_view
    • file_system
    • std::shared_mutex

2020: C++20

  • ISO/IEC 14882:2020
  • 一個比肩C++11的重大版本
  • 全新的語言特性,讓C++20看起來更加符合現代化的特征
    • module
      • 改變程序的組織方式
      • 加快編譯速度
    • concept
      • 增強了模板的設計表達能力,讓模板更好用了
      • 模板的錯誤提示變得友好
    • 協程
      • 應用級并發機制的支持
      • 讓異步編程更方便
    • range
      • 更好地支持了函數式編程風格

正在路上的C++23

  • 完善標準庫STL,值得期待的4個功能
    • 標準庫對于協程的支持(Library support for coroutines)
    • 模塊化的標準庫(A modular standard library)
    • Executors
    • networking(基于ASIO)

參考

  1. 《C++語言的設計和演化》
  2. cppreference.com
  3. 走進編程:C++的發展歷程
  4. C++17新特性
  5. C++23的目標
  6. Welcome to Bjarne Stroustrup’s homepage!
  7. Evolving a language in and for the real world: C++ 1991-2006
  8. A History of C++: 1979? 1991

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/web/95381.shtml
繁體地址,請注明出處:http://hk.pswp.cn/web/95381.shtml
英文地址,請注明出處:http://en.pswp.cn/web/95381.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

Qt6實現繪圖工具:12種繪圖工具全家桶!這個項目滿足全部2D場景

項目概述 一個基于Qt框架開發的專業繪圖工具,實現了完整的2D圖形繪制、編輯和管理功能。該項目采用模塊化設計,包含圖形繪制、圖層管理、命令模式撤銷重做、用戶界面等多個子系統,是學習現代C++和Qt框架的最佳實踐。 核心功能特性 12種專業繪圖工具 多圖層繪制系統 完整的…

Linux驅動開發學習筆記

第1章 Linux驅動開發的方式mmap映射型設計方法。【不推薦】將芯片上的物理地址映射到用戶空間的虛擬地址上,用戶操作虛擬地址來操作硬件。使用文件操作集(file_operatiopns)設計方法。【極致推薦】platfrom總線型設置方法。【比較流行】設備樹。【推薦】第2章 Linux…

mac中進行適用于IOS的靜態庫構建

前沿: 進行C開發完成之后,需要將代碼編譯成靜態庫,并且在IOS的手機系統中執行,因此記錄該實現過程. 1主要涉及內容 1.1 整體文件架構 gongyonglocalhost Attention % tree -L 2 . ├── build │ ├── __.SYMDEF │ ├── cmake_install.cmake │ ├── CMakeCache…

C++二維數組的前綴和

C二維數組的前綴和的方法很簡單&#xff0c;可以利用公式res[i][j]arr[i][j]res[i-1][j]prefix[i][j-1]-res[i-1][j-1]。輸入4 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16輸出1 3 6 10 6 14 24 36 15 33 54 78 28 60 96 136#include<bits/stdc.h> using namespace std; int…

Wifi開發上層學習1:實現一個wifi搜索以及打開的app

Wifi開發上層學習1&#xff1a;實現一個wifi搜索以及打開的app 文章目錄Wifi開發上層學習1&#xff1a;實現一個wifi搜索以及打開的app背景demo實現1.添加系統權限以及系統簽名2.布局配置3.邏輯設計3.1 wifi開關的實現3.2 wifi掃描功能3.3 連接wifi總結一、WiFi 狀態控制接口二…

【DSP28335 入門教程】定時器中斷:為你的系統注入精準的“心跳”

大家好&#xff0c;歡迎來到 DSP28335 的核心精講系列。我們已經掌握了如何通過外部中斷來響應“外部事件”&#xff0c;但系統內部同樣需要一個精準的節拍器來處理“內部周期性任務”。單純依靠 DELAY_US() 這樣的軟件延時&#xff0c;不僅精度差&#xff0c;而且會在延時期間…

從零開始:用代碼解析區塊鏈的核心工作原理

區塊鏈技術被譽為信任的機器&#xff0c;它正在重塑金融、供應鏈、數字身份等眾多領域。但對于許多開發者來說&#xff0c;它仍然像一個神秘的黑盒子。今天&#xff0c;我們將拋開炒作的泡沫&#xff0c;深入技術本質&#xff0c;用大約100行Python代碼構建一個簡易的區塊鏈&am…

網絡通信IP細節

目錄 1.通信的NAT技術 2.代理服務器 3.內網穿透和內網打洞 1.通信的NAT技術 NAT技術產生的背景是我們為了解決IPV4不夠用的問題&#xff0c;NAT在通信的時候可以對IP將私網IP轉化為公網IP&#xff0c;全局IP要求唯一&#xff0c;但是私人IP不是唯一的。 將報文發給路由器進行…

國內真實的交換機、路由器和分組情況

一、未考慮擁擠情況理想狀態的網絡通信 前面我對骨干網&#xff1a; 宜春城區SDH網圖分析-CSDN博客 數據鏈路層MAC傳輸&#xff1a; 無線通信網卡底層原理&#xff08;Inter Wi-Fi AX201&#xff09;_ax201ngw是cnvio轉pci-e-CSDN博客 物理層、數據鏈路層、網絡層及傳輸層…

atomic常用類方法

Java中的java.util.concurrent.atomic包提供了多種原子操作工具類&#xff0c;以下是核心類及其方法&#xff1a;?1. AtomicBoolean??方法?&#xff1a;get()&#xff1a;獲取當前值set(boolean newValue)&#xff1a;強制設置值compareAndSet(boolean expect, boolean upd…

算法題打卡力扣第3題:無重復字符的最長子串(mid)

文章目錄題目描述解法一&#xff1a;暴力解解法二&#xff1a;滑動窗口題目描述 解法一&#xff1a;暴力解 遍歷每一個可能的子串&#xff0c;然后逐一判斷每個子串中是否有重復字符。 具體步驟&#xff1a; 使用兩層嵌套循環來生成所有子串的起止位置&#xff1a; 外層循環 i…

HTML5 簡介和基礎骨架

一、HTML5 簡介HTML5 是 HTML&#xff08;超文本標記語言&#xff09;的第五個主要版本&#xff0c;于 2014 年 10 月由 W3C&#xff08;萬維網聯盟&#xff09;正式發布。它不僅是對 HTML4.01 和 XHTML 的升級&#xff0c;更是一套完整的 Web 技術標準&#xff0c;包含了新的標…

.NET技術深度解析:現代企業級開發指南

每日激勵&#xff1a; “不要一直責怪過去的自己&#xff0c;他曾經站在霧里也很迷茫” &#x1f31f; Hello&#xff0c;我是蔣星熠Jaxonic&#xff01; &#x1f308; 在浩瀚無垠的技術宇宙中&#xff0c;我是一名執著的星際旅人&#xff0c;用代碼繪制探索的軌跡。 &#x1…

蘋果手機文本轉音頻,自行制作背誦素材

當你在學習一段專業內容或者背誦重要知識點時&#xff0c;是不是有時會覺得眼睛看久了疲憊&#xff0c;而且記憶效果也不太理想呢&#xff1f;利用手頭的蘋果手機或iPad&#xff0c;你可以輕松將文本內容生成音頻文件&#xff0c;然后隨時隨地反復聽&#xff0c;這對于備考人士…

電子電子技術知識------MOSFET管

電子電子技術知識------MOSFET管前言一、結構與符號二、工作原理1.小功率MOSFET&#xff08;橫向導電&#xff09;2.電力MOS管三、基本特性總結前言 MOSFET是電力場效應晶體管的英文簡寫&#xff0c;又稱功率mos管&#xff0c;mos管 一、結構與符號 二、工作原理 1.小功率M…

仿真波導中超短脈沖傳輸中的各種非線性效應所產生的超連續譜

在波導中&#xff0c;超短脈沖傳輸時會受到各種非線性效應的影響&#xff0c;從而產生超連續譜。這些非線性效應包括自相位調制&#xff08;SPM&#xff09;、交叉相位調制&#xff08;XPM&#xff09;、四波混頻&#xff08;FWM&#xff09;等。基于MATLAB的仿真程序&#xff…

docker-compose的使用

目錄 1-查看容器 2-查看docker鏡像 3-運行兩個容器 4-進入idea 編寫docker-compose文件中的內容 5-編寫配置文件 6-運行 7-docker-compose中的一些命令 啟動服務 關閉服務 查看正在運行的容器 查看日志 重構新的服務 指令docker-compose 文件名 停止已運行的服務 啟動 重啟 1-查…

搭建分布式Hadoop集群[2025] 實戰筆記

文章目錄 一、實戰目標 二、集群規劃 1. 集群拓撲結構 2. 角色分配 說明: 三、環境準備 1. 修改 SSH 端口(安全加固) 操作步驟(所有節點執行): 2. FinalShell 連接配置 3. 防火墻配置 啟動并配置 firewalld: 關閉并禁用防火墻(生產環境建議精細配置,測試環境可關閉):…

【自記錄】Ubuntu20.04下Python自編譯

因為需要新的Python版本&#xff0c;但是我們不希望修改系統原生的Python版本避免某些系統應用無法啟動&#xff0c;因此自建一個干凈的路徑引入Python。 1.編譯 以下在aarch64下測試&#xff0c;x64下可能有差異 必須把相關的devel包安裝完畢&#xff0c;否則python可能缺功能…

Linux - 進程切換

&#x1f381;個人主頁&#xff1a;工藤新一 &#x1f50d;系列專欄&#xff1a;C面向對象&#xff08;類和對象篇&#xff09; &#x1f31f;心中的天空之城&#xff0c;終會照亮我前方的路 &#x1f389;歡迎大家點贊&#x1f44d;評論&#x1f4dd;收藏?文章 文章目錄進…