弥久恒新的c/c++语言,半个世纪历程表
目录
一、早期 C++(1970~1992)
二、标准 C++(c++委员会,1990~1998)
三、C++98/03 时期(1998~2010)
四、C++11 时期(2011~2013),此后每3年一个标准版本
五、C++14 时期(2014~2016)
六、C++17 时期(2017~2019)
七、C++20 时期(2020~2022)
八、C++23 时期
九、C++委员会
研制C语言的初衷是用它编写UNIX系统程序,因此,实际上C语言是UNIX的“副产品”。
1.新特性:类,成员函数,派生类,分离编译,公开与私有访问控制,友元,函数实参的类型检查,默认实参,内联函数,重载赋值运算符,构造函数,析构函数,f() 与 f(void) 相同,调用的函数与返回的函数(同步特性,不在 C++ 中)
2.库:并发任务库(不在 C++ 中)
最初,这种新语言被称为“带类的C(C with Classes)”。
1.新特性:虚函数,函数与运算符的重载,引用, new 和 delete 运算符, const 关键词,作用域解析运算符
2.库添加:复数,字符串,输入/输出流
C++ 最权威的著作、由 Bjarne Stroustmp 撰写的。
C++ 2.0 版发布,加入了多重继承、抽象类、静态成员、常量成员函数等概念。
1.新特性:多继承,成员指针,受保护访问,类型安全的连接,抽象类,静态和 const 限定的成员函数,类特有的 new 和 delete
2.库添加:输入/输出操纵符
此书按设计描述语言,包含一些仍未实现的特性。它在 ISO 标准前作为事实标准。
1.新特性:命名空间,异常处理,嵌套类,模板
1998 年,ANSI(美国国家标准协会)和 ISO(国际标准化组织)联合发布了至今使用最为广泛的 C++ 标准,称为 C++ 98。C++ 98 最为重大的改进就是加入了 “标准模板库”(Standard Template Library, STL),使得“泛型程序设计”成为 C++ 除“面向对象”外的另一主要特点。
1.新特性:RTTI(dynamic_cast、typeid),协变返回类型,转型运算符,mutable,bool,条件中的声明,模板实例化,成员模板,export。
2.库添加:本地环境,bitset,valarray,auto_ptr,以及模板化的字符串,输入/输出流和复数。
3.基于 STL:容器,算法,迭代器,函数对象
这是一个次要版本,有意稍多于一个技术更正版本,C++03 是给 C++98 打的补丁。
1.新特性:值初始化
2.C++03 中修正的缺陷报告(核心 92 个,库 125 个)
该报告为 C++ 加入了正则表达式、哈希表等重要类模板。虽然 TR1 当时没有正式成为 C++ 标准,但如今的许多 C++ 编译器都已经支持 TR1 中的特性。
此 TR 讨论各种 C++ 抽象的成本,提供实现指引,讨论 C++ 在嵌入式系统中的使用,并引入到 C 的 ISO/IEC TR 18037:2008
此 TR 是 C++ 标准库扩展,它添加下列内容到 C++ 标准库:
1.来自 Boost:引用包装器,智能指针,成员函数,result_of,bind,function,类型特征,随机数,数学特殊函数,tuple,array,无序容器(包含 hash)和正则表达式。
2.来自 C99:C99 中新的来自 math.h 的数学函数,空白字符类,浮点环境,十六进制浮点的 I/O 操纵符,固定大小整型类型,long long 类型,va_copy,snprintf() 和 vfscanf() 函数族及 printf() 和 scanf() 函数族的 C99 转换指定。
除了特殊函数之外的所有 TR1 功能都被包含于 C++11 中,有少量更改。
基本上所有C++0x的核心特性都完成了,新的C++0x标准草稿包括了13个源自TR1的库及70个库特性,修正了约300个库缺陷。此外,新标准草案还包括了70多个语言特性及约300个语言缺陷的修正。
所有核心特性都已经完成,处理了各国代表的评议。
此国际标准是 C++ 标准库扩展,它添加了曾为 TR1 的一部分,但未包含于 C++11 的特殊函数:椭圆积分,指数积分,拉盖尔多项式,勒让德多项式,埃尔米特多项式,贝塞尔函数,诺依曼函数,beta 函数以及黎曼 zeta 函数。此标准被并入 C++17。
C++11则是一次全面的大进化,引入大量更改,以标准化既存实践,并改进 C++ 程序员可用的抽象
1.新语言特性:auto 和 decltype,预置和弃置的函数,final 和 override,尾随返回类型,右值引用,移动构造函数/移动赋值,有作用域 enum,constexpr 和字面类型,列表初始化,委托和继承的构造函数,花括号或等号初始化器,nullptr、long long、char16_t 与 char32_t,类型别名,变参模板,广义化联合体,广义化 POD,Unicode 字符串字面量,用户定义字面量,属性、lambda 表达式、noexcept、alignof 与 alignas,多线程内存模型,线程局域存储,GC 接口,范围 for(基于 Boost 库),静态断言(基于 Boost 库)
2.新库特性:原子操作库,emplace() 和遍及既存标准库所有部分的其他右值引用使用,std::initializer_list,有状态和有作用域分配器,forward_list,chrono 库,ratio 库,新算法,Unicode 转换平面
3.来自 TR1:所有 TR1,除了特殊函数。TR1 中的许多特性正式成为 C++11 标准的一部分。
4.来自 Boost:线程库,exception_ptr,error_code 和 error_condition,迭代器改进( std::begin、std::end、std::next、std::prev)
5.来自 C:C 风格 Unicode 转换函数。
6.C++11 中修正的缺陷报告(核心 741 个,库 868 个)
此 TR 实现来自 IEEE 754-2008 浮点算术标准的十进制浮点类型:std::decimal::decimal32、std::decimal::decimal64 及 std::decimal::decimal128。
C++ 标准的次要版本,作为C++11的一个小扩展,主要提供漏洞修复和小的改进。
1.新语言特性:变量模板,多态 lambda,lambda 俘获表达式,new/delete 消除,放松 constexpr 函数上的限制,二进制字面量,数位分隔符,函数的返回类型推导,带花括号或等号初始化器的类的聚合初始化。
2.新库特性:std::make_unique、std::shared_timed_mutex 及 std::shared_lock、std::integer_sequence、std::exchange、std::quoted 以及许多既存库设施的小改进,例如某些算法的双范围重载,类型特征的类型别名,用户定义的 string,duration 和复数字面量等。
3.C++14 中修正的缺陷报告(核心 276 个,库 158 个)
此 TS 是实验性 C++ 库扩展,它指定基于 boost.filesystem V3 的文件系统库(有一些修改和扩充)。此 TS 被并入 C++17。
此 TS 为所有标准库算法标准化了并行和向量并行 API,还添加了新算法,例如 reduce、transform_reduce 和 exclusive_scan。此 TS 被并入 C++17。
此 TS 扩展了 C++ 核心语言,添加同步和原子块以及事务安全函数,以实现事务性内存语义。
此 TS 添加数个新组件到 C++ 标准库:optional、any、string_view、sample、search、apply、多态分配器和类型特征的变量模板。此 TS 被并入 C++17。
此 TS 扩展了 C++ 核心语言,添加概念(具名类型要求)和制约(模板、函数和变量声明中对允许的类型施加的限制),这有助于元编程并简化模板实例化诊断,见概念。此 TS 已并入 C++20,并有所省略。
此 TS 扩展 C++ 库以包含针对 std::future,闩与屏障,以及原子智能指针的数个扩展。
1.语言更改:折叠表达式、类模板实参推导、auto 非类型模板形参,编译时 if constexpr、inline 变量、结构化绑定、if 和 switch 的初始化器、u8-char、简化嵌套命名空间、using 声明能声明多个名字,令 noexcept 为类型系统的部分,新的求值顺序规则,带显式对齐的分配函数,受保证的复制消除,__has_include,*this 的 lambda 捕获,constexpr lambda,属性命名空间不必重复,新属性 [[fallthrough]]、[[nodiscard]] 及 [[maybe_unused]]。移除三标符, register 关键词、bool 自增。
2.库更改: std::variant、std::launder、未初始化内存工具(std::destroy_at/std::destroy/std::destroy_n、std::uninitialized_move、std::uninitialized_value_construct 等),map/set 抽取 及 map/set 合并,byte、std::make_from_tuple、std::to_chars/from_chars,文件系统中的相对路径支持( proximate、relative、weakly_canonical),文件系统中的目录项缓存、连续迭代器,非成员 size/empty/data、map/unordered_map try_emplace 及insert_or_assign、uncaught_exceptions、变参 lock_guard、as_const、conjunction/disjunction/negation、类型特征变量 xxx_v、透明的 owner_less、duration 和 time_point 的舍入函数、std::shared_ptr 的数组支持,not_fn、weak_from_this、is_always_lock_free、is_swappable、clamp、3D hypot、缓存线接口、is_invocable、is_aggregate、has_unique_object_representations。
3.库更改:弃用 std::iterator、std::raw_storage_iterator、std::get_temporary_buffer、std::is_literal_type、std::result_of、整个
4.来自 TS:文件系统库,库基础 v1(包含 optional、any、string_view、多态分配器、搜索器、apply),并行 v1(包含执行策略、reduce、inclusive_scan、exclusive_scan),但移除 exception_list。来自数学特殊 TR:特殊数学函数,来自库基础 v2:std::gcd、std::lcm
5.来自 C11:std::aligned_alloc,std::timespec_get
6.C++17 中修正的缺陷报告(核心 290 个,库 363 个)
此 TS 扩展 C++ 库,以包含范围——一个新的、更有力的取代迭代器对的抽象,以及范围视图,哨位范围,用于就地变换的投影,新的迭代器及算法。此扩展最终使得能以 sort(v); 排序 vector。
此 TS 扩展 C++ 核心语言及标准库,以包含无栈协程(可恢复函数)。它添加了关键词 co_await、co_yield 及 co_return。
此 TS 扩展 C++ 库,以包含基于 boost.asio 的 TCP/IP 网络。
此 TS 扩展 C++ 核心语言以包含模块。它添加了关键字 module、import,并重新引入带新含义的关键字 export。
此 TS 扩展 C++ 库,使之包含二个新执行策略(unseq 与 vec),添加 reduction_plus 或 for_loop_strided 之类的并行算法,分支合并式并行任务的任务块,SIMD 类型及这些类型上的操作。
C++20 的 四大新特性:概念、范围、协程和模块,以及核心语言(包括一些新的运算符和指示符)。
主条目: C++20,C++17 后的 C++ 标准主要版本。
实验性技术规范,2023 C++23 ( 2021-10-23 草案)
主条目: C++23,C++ 标准的下个主要版本。
标准c++基金会:Standard C++
c++标准委员会:ISO/IEC JTC1/SC22/WG21 - The C++ Standards Committee - ISOCPP