C++ 的历史

来自cppreference.com
< cpp‎ | language
 
 
C++ 语言
 

目录

[编辑] 早期 C++

  • 1979 :首次实现 C with Classes
  1. 新特性:成员函数导出类、分离编译、公开与私有访问控制友元、函数参数的类型检查、默认实参inline 函数重载赋值运算符构造函数析构函数、 f() 同 f(void) 、调用的函数与返回的函数(同步特性,不在 C++ 中)
  2. 库:共时任务库(不在 C++ 中)
  • 1982 : 出版 C with Classes 参考手册
  • 1984 : 实现 C84 ,出版参考手册
  • 1985 : Cfront 1.0
  1. 新特性:虚函数、函数与运算符重载引用newdelete 运算符、 关键词 const 、作用域解析运算符
  2. 库添加: complexstringiostream
  • 1985 : The C++ Programming Language ,第 1 版
  • 1986 : "whatis?" 提案将设计目标写入文档,包含多继承、异常处理和模板。
  • 1987 : C++ 支持于 GCC 1.15.3
  • 1989 : Cfront 2.0
  1. 新特性:多继承指向成员指针受保护访问、类型安全的链接、抽象类静态const 成员函数,类限定的 newdelete
  2. 库添加: I/O 操纵符
  • 1990 : The Annotated C++ Reference Manual

此书按设计描述语言,包含一些仍未实现的特性。它在 ISO 标准前作为事实标准。

  1. 新特性:命名空间异常处理嵌套类模板
  • 1991 : Cfront 3.0
  • 1991 : The C++ Programming Language ,第 2 版

[编辑] 标准 C++

  • 1990 ANSI C++ 委员会成立
  • 1991 ISO C++ 委员会成立
  • 1992 STL 以 C++ 实现
  • 1998 C++98 (ISO/IEC 14882:1998)
  1. 新特性: RTTI ( dynamic_casttypeid )、协变返回类型转型运算符mutablebool 、条件中的声明、模板实例化成员模板、 export
  2. 库添加:容器算法迭代器函数对象(基于 STL )、 localebitsetvalarrayauto_ptr模板化字符串iostreamcomplex
  • 1998 The C++ Programming Language ,第 3 版
  • 1999 委员会成员成立 Boost 以为标准产生高质量的候选库。
  • 2003 C++03 ( ISO/IEC 14882:2003 )

这是次要版本,有意稍多于一个技术更正

  1. 新特性:值初始化
C++03 中修复的缺陷报告(核心 92 个,库 125 个)

此 TR 讨论各种 C++ 抽象的成本,提供实现指引,讨论 C++ 在嵌入式系统中的使用,并引入到 C 的 ISO/IEC TR 18037:2008 <iohw.h><hardware> 接口。

此 TR 是 C++ 标准库扩展,它添加下列内容到 C++ 标准库:

  1. 来自 Boost :引用包装器智能指针成员函数result_ofbindfunction类型特性随机数、数学特殊函数、 tuplearray无序容器(包含 hash )和正则表达式
  2. 来自 C99 : C99 中新的来自 math.h 的数学函数、空格字符类浮点环境hexfloat I/O 操纵符固定大小整数类型long long 类型va_copysnprintf()vfscanf() 函数族及 printf()scanf() 函数族的 C99 转换指定。

所有 TR1 除了特殊函数都包含于 C++11 ,有少量更改。

此国际标准是 C++ 标准库扩展,它添加曾为 TR1 的部分,但未包含于 C++11 的特殊函数:椭圆积分、指数积分、拉盖尔多项式、勒让德多项式、埃尔米特多项式、贝塞尔函数、诺依曼函数、 beta 函数以及黎曼 zeta 函数。此标准被并入 C++17 。

引入大量更改,以标准化既存实践,并改进 C++ 程序员可用的抽象

  1. 新语言特性: autodecltype 、默认化和被删除的函数、 finaloverride尾随返回类型右值引用移动构造函数/移动赋值有作用域 enumconstexpr字面类型列表初始化委托继承的构造函数、花括号或等号初始化器、 nullptrlong longchar16_t 与 char32_t类型别名变参数模板广义化联合体广义化 PODUnicode 字符串字面量用户定义字面量属性lambda 表达式noexceptalignofalignas 、多线程内存模型、线程局域存储GC 接口范围 for (基于 Boost 库)、静态断言(基于 Boost 库)
  2. 新库特性:原子操作库、 emplace() 和遍及既存标准库所有部分的其他右值引用使用、 std::initializer_list 、有状态和有作用域分配器、 forward_listchrono 库ratio 库、新算法、 Unicode 转换平面
  3. 来自 TR1 :所有 TR1 ,除了特殊函数。
  4. 来自 Boost :线程库exception_ptrerror_codeerror_condition 、迭代器改进( std::beginstd::endstd::nextstd::prev
  5. 来自 C : C 风格 Unicode 转换函数
C++11 中修复的缺陷报告(核心 741 个,库 685 个)

此 TR 实现来自 IEEE 754-2008 浮点算术标准的十进制浮点类型: std::decimal::decimal32 、 std::decimal::decimal64 及 std::decimal::decimal128 。

C++ 标准的次要版本

  1. 新语言特性:变量模板多态 lambda 、 lambda 捕获表达式、 new/delete 消除、放松 constexpr 函数上的限制二进制字面量、数位分隔符、函数的返回类型推导、带花括号或等号初始化器的类的聚合初始化
  2. 新库特性: std::make_uniquestd::shared_timed_mutexstd::shared_lockstd::integer_sequencestd::exchangestd::quoted 以及许多既存库设施的小改进,例如某些算法的双范围重载、类型特性的类型别名、用户定义的 string 、 duration 和复数字面量等。
C++14 中修复的缺陷报告(核心 276 个,库 149 个)

此 TS 是实验性 C++ 库扩展,它指定基于 boost.filesystem V3 的文件系统库(有一些修改和扩充)。此 TS 被并入 C++17 。

此 TS 为所有标准库算法标准化并行和向量并行,还添加新算法,例如 reducetransform_reduceexclusive_scan 。此 TS 被并入 C++17 。

此 TS 以同步和原子块以及实现事务性内存语义的事务安全函数扩展 C++ 核心语言。

此 TS 添加数个新组件到 C++ 标准库: optionalanystring_viewsamplesearchapply多态分配器和类型特性的变量模板。此 TS 被并入 C++17 。

此 TS 以概念(具名类型要求)和制约(模板、函数和变量声明中允许的类型上的限制)扩展 C++ 核心语言,这有助于元编程并简化模板实例化诊断,见概念。此 TS 已并入 C++20 ,并省略了一些。

此 TS 扩展 C++ 库以包含对 std::future 、闩与屏障及原子智能指针的数个扩展

  1. 语言更改:折叠表达式类模板实参推导、 auto 非类型模板形参、编译时 if constexprinline 变量结构化绑定ifswitch 的初始化器、 u8-char 、简化嵌套命名空间using 声明能声明多个名称、令 noexcept 为类型系统的部分、新的求值顺序规则、带显式对齐的分配函数、受保证的复制消除__has_include*this 的 lambda 捕获constexpr lambda属性命名空间不必重复、新属性 [[fallthrough]] 、 [[nodiscard]] 及 [[maybe_unused]] 。移除三标符register 关键词、 bool 自增
  2. 库更改: std::variantstd::launder 、未初始化内存工具( std::destroy_at/std::destroy/std::destroy_nstd::uninitialized_movestd::uninitialized_value_construct 等)、 map/set extract 及 map/set mergebytestd::make_from_tuplestd::to_chars/from_chars 、文件系统中的相对路径支持( proximaterelativeweakly_canonical )、文件系统中的目录入口缓存、相接迭代器、非成员 size/empty/data 、 map/unordered_map try_emplaceinsert_or_assignuncaught_exceptions 、变参数 lock_guardas_constconjunction/disjunction/negation类型特性变量 xxx_v 、通透的 owner_lessdurationtime_point 的舍入函数、 std::shared_ptr 的数组支持、 not_fnweak_from_thisis_always_lock_freeis_swappableclamp3D hypot缓存线接口is_invocableis_aggregatehas_unique_object_representations 。弃用 std::iteratorstd::raw_storage_iteratorstd::get_temporary_bufferstd::is_literal_typestd::result_of<codecvt> 的全体。移除 auto_ptr弃用的函数对象std::random_shufflestd::unexpected过时的 iostream 别名
  3. 来自 TS :文件系统库、库基础 v1 (包含 optionalanystring_view多态分配器搜索器apply )、并行 v1 (包含执行策略reduceinclusive_scanexclusive_scan ),但移除 exception_list 。来自特殊数学 IS :特殊数学函数,来自库基础 v2 : std::gcdstd::lcm
  4. 来自 C11 : std::aligned_allocstd::timespec_get
C++17 中修复的缺陷报告(核心 ? 个,库 281 个)

此 TS 扩展 C++ 库,以它包含范围——新的、更有力的取代迭代器对的抽象,以及范围视图、哨兵范围、用于临时变换的投影、新的迭代器及算法。此扩展最终使得能以 sort(v); 排序 vector 。

此 TS 扩展 C++ 核心语言及标准库,以包含无栈携程(可恢复函数)。它添加关键词 co_awaitco_yieldco_return

[编辑] 未来发展

C++ 标准的下个主要版本

  1. 语言更改:概念三路比较运算符 <=>指代初始化器、范围 for 中的初始化语句和初始化器
  2. 库更改: std::endianmake_shared 的数组支持、 std::remove_cvrefstd::to_address 、浮点及 shared_ptr 原子类型、 std::osyncstream 、 <algorithm> 、 <utility> 、 <complex> 的 constexpr 、 std::string(_view)::starts_with 及 ends_with 。

[编辑] 参阅

C 的历史C 文档

[编辑] 外部链接