C++发展史

回想1999年就开始学习C语言,C++主要用C++98,C++11这两个版本,开发软件从TurboC2.0、TurboC++3.0,到Visual C++、Visual Studio、Xcode等,从16年后逐渐用C/C++也少了,代码写得少了,而更喜欢使用Python、js等脚本语言,省心省力。

整个软件开发行业用C/C++的也越来越少,但一些重要的地方仍然少了它的身影,C++标准也在发展,今天理一理C++的发展史,我似乎看到C++在不同年代的照片,如同昨天旅游时找出14年的照片,一张张的复刻,复刻的时光,意味着时间的流逝,意味着我们的老去!

image.png

初览

C++ 的国际标准有 5 个版本,1998, 2003, 2011, 2014, 2017

C++11到C++20编译器支持


C++98

C++98是第一个正式C++标准,C++03是在C++98上面进行了小幅度的修订,其实C++在第一个标准C++98之前就已经广为使用了。

只不过那时候还没有一个官方的统一标准,后来才开始起草标准草案,起草了n年,直到98年才最终发布。(所以你可以看到一些早期的C++编译器对标准的支持程度很差,比如经典的VC6.0,在研发的时候C++的第一个标准还没公布呢)

至于什么C89、C99这些,是C语言的标准,不是C++的标准,很容易被一些人混淆。


C++03

C++03 是给 C++98 打的补丁,所以现在的人提到 C++98, C++03 往往指的是同一个。


C++11

C++11则是一次全面的大进化(之前称C++11为C++0x,以为会在08~09年公布,没想到拖到了11年)。

关键字及新语法

1.1. auto 关键字及用法

1.2. nullptr 关键字及用法

1.3. for 循环语法

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

智能指针内存管理

4.1. std::shared_ptr

4.2. std::weak_ptr

其他

5.1. std::function、std::bind 封装可执行对象

5.2. lambda 表达式

原文有代码讲解

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


C++14

C++14旨在作为C++11的一个小扩展,主要提供漏洞修复和小的改进。

1 新的语言特性

1.1 泛型的lambda

1.2 Lambda捕获部分中使用表达式

1.3 函数返回类型推导

1.4 另一种类型推断

1.5 放松的constexpr限制

1.6 变量模板

1.7 聚合体成员初始化

1.8 二进制字面量

1.9 数字分位符

2 新的标准库特性

2.1 共享的互斥体和锁

2.2 元函数的别名

2.3 关联容器中的异构查找

2.4 标准自定义字面量

2.5 通过类型寻址多元组

2.6 较小的标准库特性

3 已被移除或是不包含在C++14标准的特性

3.1 关于数组的扩展

3.2 Optional值

3.3 Concepts Lite

C++14新特性


C++17

1 关键字

1.1 constexpr

1.2 static_assert

1.3 auto

1.4 typename

1.5 inline

2 语法

2.1 折叠表达式

2.2 结构化绑定

2.3 允许非类型模板参数进行常量计算

2.4 条件分支语句初始化

2.5 聚合初始化

2.6 嵌套命名空间

2.7 lambda表达式捕获*this的值

2.8 枚举[类]对象的构造

2.9 十六进制单精度浮点数字面值

2.10 基于对齐内存的动态内存分配

2.11 细化表达式的计算顺序

2.12 模板类的模板参数自动推导

2.13 简化重复命名空间的属性列表

2.14 不支持、非标准的属性

2.15 改写与继承构造函数

2.16 内联变量

2.17 用auto作为非类型模板参数

3 宏

3.1 __has_include

4 属性

4.1 fallthrough

4.2 nodiscard

4.3 maybe_unuse

C++17新特性


C++20

C++20 的 Big Four(四大新特性:概念、范围、协程和模块)以及核心语言(包括一些新的运算符和指示符)。

1 关键字

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 位域变量的默认成员初始化

2.2 修改const限定的成员指针

2.3 允许lambda表达值按值捕获this

2.4 指定初始化

2.5 lambda表达式支持模板

2.6 从构造函数推导出模板参数类型

2.7 基于范围的for循环初始化

2.8 简化lambda的隐式捕获

2.9 ADL与不可见的模板函数

2.10 operator<=>

2.11 基于范围的for循环初始化

2.12 默认可构造可分配的无状态lambdas

2.13 专门的访问检查

2.14 constexpr函数的实例化

2.15 允许lambda在初始化捕获时进行包扩展

2.16 放宽结构化绑定,新增自定义查找规则

2.17 放宽基于范围的for循环,新增自定义范围方法

2.18 类类型的非类型模板参数

关于类类型的非类型模板参数的优化

类类型的非类型模板参数的条件(满足任意一个):

2.19 禁止使用用户自己声明的构造函数来进行聚合初始化

旧版的几个问题

解决方案

2.20 嵌套内联命名空间

2.21 约束声明的另一种办法

2.22 允许在常量表达式中使用dynamic_cast多台typeid

2.23 允许用圆括弧的值进行聚合初始化

2.24 new表达式的数组元素个数的推导

2.25 unicode字符串字面量

2.26 允许转换成未知边界的数组

2.27 聚合初始化推导类模板参数

2.28 隐式地将返回的本地变量转换为右值引用

2.29 允许default修饰运算符按值比较

2.30 非类型模板参数等效的条件

3 宏

4 属性

4.1 likely和unlikely

4.2 no_unique_address

4.3 nodiscard

5 弃用

5.1 lambda弃用使用[=]来隐式捕获this

5.2 比较运算符的改进

5.3 弃用下标表达式中的逗号操作符

比较详细介绍

新特性

9月4日,C++20 的国际标准草案(DIS, Draft International Standard)投票结束,最终获全票批准通过。

这意味着 C++20 已获得了最终的技术批准,并完成了 ISO 的投票,预计在完成最后一轮 ISO 的编辑工作后,C++20 将在2020年底正式发布。

C++23

进度表和计划中...


参考

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

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 202,905评论 5 476
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 85,140评论 2 379
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 149,791评论 0 335
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 54,483评论 1 273
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 63,476评论 5 364
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,516评论 1 281
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 37,905评论 3 395
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,560评论 0 256
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 40,778评论 1 296
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,557评论 2 319
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,635评论 1 329
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,338评论 4 318
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 38,925评论 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,898评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,142评论 1 259
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 42,818评论 2 349
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,347评论 2 342