C++發(fā)展史

回想1999年就開始學(xué)習(xí)C語言,C++主要用C++98,C++11這兩個(gè)版本,開發(fā)軟件從TurboC2.0、TurboC++3.0,到Visual C++、Visual Studio、Xcode等,從16年后逐漸用C/C++也少了,代碼寫得少了,而更喜歡使用Python、js等腳本語言,省心省力。

整個(gè)軟件開發(fā)行業(yè)用C/C++的也越來越少,但一些重要的地方仍然少了它的身影,C++標(biāo)準(zhǔn)也在發(fā)展,今天理一理C++的發(fā)展史,我似乎看到C++在不同年代的照片,如同昨天旅游時(shí)找出14年的照片,一張張的復(fù)刻,復(fù)刻的時(shí)光,意味著時(shí)間的流逝,意味著我們的老去!

image.png

初覽

C++ 的國際標(biāo)準(zhǔn)有 5 個(gè)版本,1998, 2003, 2011, 2014, 2017

C++11到C++20編譯器支持


C++98

C++98是第一個(gè)正式C++標(biāo)準(zhǔn),C++03是在C++98上面進(jìn)行了小幅度的修訂,其實(shí)C++在第一個(gè)標(biāo)準(zhǔn)C++98之前就已經(jīng)廣為使用了。

只不過那時(shí)候還沒有一個(gè)官方的統(tǒng)一標(biāo)準(zhǔn),后來才開始起草標(biāo)準(zhǔn)草案,起草了n年,直到98年才最終發(fā)布。(所以你可以看到一些早期的C++編譯器對標(biāo)準(zhǔn)的支持程度很差,比如經(jīng)典的VC6.0,在研發(fā)的時(shí)候C++的第一個(gè)標(biāo)準(zhǔn)還沒公布呢)

至于什么C89、C99這些,是C語言的標(biāo)準(zhǔn),不是C++的標(biāo)準(zhǔn),很容易被一些人混淆。


C++03

C++03 是給 C++98 打的補(bǔ)丁,所以現(xiàn)在的人提到 C++98, C++03 往往指的是同一個(gè)。


C++11

C++11則是一次全面的大進(jìn)化(之前稱C++11為C++0x,以為會在08~09年公布,沒想到拖到了11年)。

關(guān)鍵字及新語法

1.1. auto 關(guān)鍵字及用法

1.2. nullptr 關(guān)鍵字及用法

1.3. for 循環(huán)語法

STL 容器

2.1. std::array

2.2. std::forward_list

2.3. std::unordered_map

2.4. std::unordered_set

多線程

3.1. std::thread

3.2. std::atomic

3.3. std::condition_variable

智能指針內(nèi)存管理

4.1. std::shared_ptr

4.2. std::weak_ptr

其他

5.1. std::function、std::bind 封裝可執(zhí)行對象

5.2. lambda 表達(dá)式

原文有代碼講解

C++11常用新特性快速一覽


C++14

C++14旨在作為C++11的一個(gè)小擴(kuò)展,主要提供漏洞修復(fù)和小的改進(jìn)。

1 新的語言特性

1.1 泛型的lambda

1.2 Lambda捕獲部分中使用表達(dá)式

1.3 函數(shù)返回類型推導(dǎo)

1.4 另一種類型推斷

1.5 放松的constexpr限制

1.6 變量模板

1.7 聚合體成員初始化

1.8 二進(jìn)制字面量

1.9 數(shù)字分位符

2 新的標(biāo)準(zhǔn)庫特性

2.1 共享的互斥體和鎖

2.2 元函數(shù)的別名

2.3 關(guān)聯(lián)容器中的異構(gòu)查找

2.4 標(biāo)準(zhǔn)自定義字面量

2.5 通過類型尋址多元組

2.6 較小的標(biāo)準(zhǔn)庫特性

3 已被移除或是不包含在C++14標(biāo)準(zhǔn)的特性

3.1 關(guān)于數(shù)組的擴(kuò)展

3.2 Optional值

3.3 Concepts Lite

C++14新特性


C++17

1 關(guān)鍵字

1.1 constexpr

1.2 static_assert

1.3 auto

1.4 typename

1.5 inline

2 語法

2.1 折疊表達(dá)式

2.2 結(jié)構(gòu)化綁定

2.3 允許非類型模板參數(shù)進(jìn)行常量計(jì)算

2.4 條件分支語句初始化

2.5 聚合初始化

2.6 嵌套命名空間

2.7 lambda表達(dá)式捕獲*this的值

2.8 枚舉[類]對象的構(gòu)造

2.9 十六進(jìn)制單精度浮點(diǎn)數(shù)字面值

2.10 基于對齊內(nèi)存的動(dòng)態(tài)內(nèi)存分配

2.11 細(xì)化表達(dá)式的計(jì)算順序

2.12 模板類的模板參數(shù)自動(dòng)推導(dǎo)

2.13 簡化重復(fù)命名空間的屬性列表

2.14 不支持、非標(biāo)準(zhǔn)的屬性

2.15 改寫與繼承構(gòu)造函數(shù)

2.16 內(nèi)聯(lián)變量

2.17 用auto作為非類型模板參數(shù)

3 宏

3.1 __has_include

4 屬性

4.1 fallthrough

4.2 nodiscard

4.3 maybe_unuse

C++17新特性


C++20

C++20 的 Big Four(四大新特性:概念、范圍、協(xié)程和模塊)以及核心語言(包括一些新的運(yùn)算符和指示符)。

1 關(guān)鍵字

1.1 concept

1.2 requires

1.3 typename

1.4 explicit

1.5 constexpr

1.6 char8_t

1.7 consteval

1.8 co_await、co_yield、co_return

1.9 constinit

2 語法

2.1 位域變量的默認(rèn)成員初始化

2.2 修改const限定的成員指針

2.3 允許lambda表達(dá)值按值捕獲this

2.4 指定初始化

2.5 lambda表達(dá)式支持模板

2.6 從構(gòu)造函數(shù)推導(dǎo)出模板參數(shù)類型

2.7 基于范圍的for循環(huán)初始化

2.8 簡化lambda的隱式捕獲

2.9 ADL與不可見的模板函數(shù)

2.10 operator<=>

2.11 基于范圍的for循環(huán)初始化

2.12 默認(rèn)可構(gòu)造可分配的無狀態(tài)lambdas

2.13 專門的訪問檢查

2.14 constexpr函數(shù)的實(shí)例化

2.15 允許lambda在初始化捕獲時(shí)進(jìn)行包擴(kuò)展

2.16 放寬結(jié)構(gòu)化綁定,新增自定義查找規(guī)則

2.17 放寬基于范圍的for循環(huán),新增自定義范圍方法

2.18 類類型的非類型模板參數(shù)

關(guān)于類類型的非類型模板參數(shù)的優(yōu)化

類類型的非類型模板參數(shù)的條件(滿足任意一個(gè)):

2.19 禁止使用用戶自己聲明的構(gòu)造函數(shù)來進(jìn)行聚合初始化

舊版的幾個(gè)問題

解決方案

2.20 嵌套內(nèi)聯(lián)命名空間

2.21 約束聲明的另一種辦法

2.22 允許在常量表達(dá)式中使用dynamic_cast多臺typeid

2.23 允許用圓括弧的值進(jìn)行聚合初始化

2.24 new表達(dá)式的數(shù)組元素個(gè)數(shù)的推導(dǎo)

2.25 unicode字符串字面量

2.26 允許轉(zhuǎn)換成未知邊界的數(shù)組

2.27 聚合初始化推導(dǎo)類模板參數(shù)

2.28 隱式地將返回的本地變量轉(zhuǎn)換為右值引用

2.29 允許default修飾運(yùn)算符按值比較

2.30 非類型模板參數(shù)等效的條件

3 宏

4 屬性

4.1 likely和unlikely

4.2 no_unique_address

4.3 nodiscard

5 棄用

5.1 lambda棄用使用[=]來隱式捕獲this

5.2 比較運(yùn)算符的改進(jìn)

5.3 棄用下標(biāo)表達(dá)式中的逗號操作符

比較詳細(xì)介紹

新特性

9月4日,C++20 的國際標(biāo)準(zhǔn)草案(DIS, Draft International Standard)投票結(jié)束,最終獲全票批準(zhǔn)通過。

這意味著 C++20 已獲得了最終的技術(shù)批準(zhǔn),并完成了 ISO 的投票,預(yù)計(jì)在完成最后一輪 ISO 的編輯工作后,C++20 將在2020年底正式發(fā)布。

C++23

進(jìn)度表和計(jì)劃中...


參考

C和C++的歷史版本迭代整理

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

友情鏈接更多精彩內(nèi)容