C++历史

早期C++

•1979: 首次实现引入类的C(C with Classes first implemented)

1.新特性:类、成员函数、继承类、独立编译、公共和私有访问控制、友元、函数参数类型检查、默认参数、内联函数、赋值符号重载、构造函数、析构函数、f()相当于f(void)、调用函数和返回函数(同步机制,不是在C++中)
2.库:并发任务程序库(不是在C++中)

•1982: 发布引入类的C之参考手册(C with Classes reference manual published)

•1984: C84的实现,参考手册发布(C84 implemented, reference manual published)

•1985: Cfront 1.0

1.新特性:虚函数、函数和操作符重载、引用、new和delete操作符、const关键词、范围解析运算符::
2.新加入的库:复数(complex)、字符串(string)、输入输出流(iostream)

•1985: 《C++编程语言第一版》(The C++ Programming Language, 1st edition)

•1989: Cfront 2.0

1.新特性:多重继承、成员指针、保护访问控制、类型安全联接、抽象类、静态和常量成员函数、特定类的new和delete
2.新库:I/O 操作器

•1990: 《C++参考手册注解》(The Annotated C++ Reference Manual)
此书从设计层面讲述了该语言,包括一些还没有实现的特性,在ISO标准以前它成为实际上的标准。

1.新特性:命名空间、异常捕获、内部类

•1991: Cfront 3.0

•1991: 《C++编程语言第二版》(The C++ Programming Language, 2nd edition)


标准C++

•1990 ANSI C++委员会成立(ANSI C++ Committee founded)

•1991 ISO C++委员会成立(ISO C++ Committee founded)

•1998 C++98(ISO/IEC14882:1998)

1.新特性:运行时类型信息[RTTI(dynamic_cast, typeid)]、协变返回类型(covariant return types)、cast 操作符、可变型、布尔型、声明情况、模板例示、成员模板、导出
2.新库:容器、算法、迭代器、函数对象(STL中)、区域设置、位集合、值向量、自动指针(auto_ptr)、模块化字符串、输入输出流和复数

•1998 《C++编程语言第三版》(The C++ Programming Language, 3rd edition)

•1999 Boost由委员会成员成立,旨在开发新的高质量库以作为标准库的候选库(Boost founded by the committee members to produce new high-quality candidate libraries for the standard)

•2003 C++03 (ISO/IEC 14882:2003)
这是一个次要修订版本,修正了一些错误。

1.新特性:初始化值
搜集错误报告修复:125个,包括69号错误,该错误连续生成std::vector

•2006 性能技术报告[Performance TR (ISO/IEC TR 18015:2006) (ISO Store ) (2006 draft )]

•2007 2007扩展库第一报告[2007 Library extension TR1 (ISO/IEC TR 19768:2007) (ISO store ) (2005 draft )]
这个技术报告是C++库扩展,加入了以下内容:

1.源自Boost:引用包装器(Reference wrapper)、智能指针(Smart pointers)、成员函数(Member function)、Result of 、绑定(Binding)、函数(Function)、类型特征(type traits)、随机(Random)、数学特殊函数(Mathematical Special Functions)、元组(Tuple)、数组(Array)、无序容器[Unordered Containers包括哈希(Hash)]还有正则表达式(Regular Expressions)
2.源自C99:math.h中同时也是新加入C99的数学函数、空白字符类、浮点环境(Floating-point environment)、十六进制浮点I/O操作符(hexfloat I/O Manipulator)、固定大小整数类型(fixed-size integral types)、长整型(the long long type)、va_copy、snprintf() 和vscanf()函数族,还有C99 的printf()与scanf()函数族的指定转换
TR1除了一些特殊函数,大部分都被囊括进C++11。

•2010 数学特殊函数技术报告[2010 Mathematical special functions TR (ISO/IEC 29124:2010) (ISO Store ) (2010 draft )]
此TR是一个C++标准库扩展,加入了TR1中的部分特殊函数,但那些函数之前没有被包括进C++11:椭圆积分、指数积分、拉盖尔多项式(Laguerre polynomials)、勒让徳多项式(Legendre polynomials)、艾尔米特多项式(Hermite polynomials)、贝塞尔(Bessel)函数、纽曼(Newmann)函数、β函数和黎曼(Riemann)ζ函数

•2011 C++11 (ISO/IEC 14882:2011) (ISO Store) (ANSI Store ) (Post-publication draft )
对C++程序员,在现有惯例标准化和抽象概念提升方面有大量的改变可用。

1.新语言特性:自动(auto)和类型获取(decltype)、默认和已删除函数(defaulted and deleted functions)、不可更改(final)和重载(override)、拖尾返回类型(trailing return type)、右值引用(rvalue references)、移动构造函数(move constructors)/移动赋值(move assignment)、作用域枚举(scoped enums)、常量表达式(constexpr)和文字类型(literal types)、列表初始化(list initialization)、授权(delegating)和继承构造器(inherited constructors)、大括号或等号(brace-or-equal)初始化器、空指针(nullptr)、长整型(long long)、char16_t和char32_t、类型别名(type aliases)、可变参数模板(variadic templates)、广义联合体(generalized unions)、广义POD、Unicode字符串文字(Unicode string literals)、自定义文字(user-defined literals)、属性(attributes)、λ表达式(lambda expressions)、无异常(noexcept)、对齐查询(alignof)和对齐指定(alignas)、多线程内存模型(multithreaded memory model)、线程本地存储(thread-local storage)、GC接口(GC interface)、range for(based on a Boost library)、静态断言[static assertions(based on a Boost library)]
2.新库特性:原子操作库(atomic operations library)、emplace()和贯穿整个现有库的右值引用的使用、std::initializer_list、状态性的和作用域内的分配器(stateful and scoped allocators)、前向列表(forward_list)、计时库(chrono library)、分数库(ratio library)、新算法(new algorithms)、Unicode conversion facets
3.源自TR1:除了特殊的函数,TR1中全部都被囊括进来
4.源自Boost:线程库(The thread library)、异常指针(exception_ptr)、错误码(error_code)和错误情况(error_condition)、迭代器改进[iterator improvements(std::begin, std::end, std::next, std::prev)]
5.源自C:C风格的Unicode转换函数
6.搜集错误报告修复:363个错误在2008草案中被解决,另外有322个错误接着被修复。其中的错误包括530号,它使得std::basic_string对象相连。

•2011 十进制浮点技术报告[Decimal floating-point TR (ISO/IEC TR 24733:2011) (ISO Store ) (2009 draft )]
这个TR根据IEEE 754-2008浮点算数标准(Floating Point Arithmetic):std::decimal::decimal32、std::decimal::decimal64、std::decimal::decimal128

•2012 标准C++基金会成立(The Standard C++ Foundation founded )

•2013 《C++编程语言第四版》The C++ Programming Language, 4th edition


未来发展

*2014 C++14 (2014 final draft )
C++标准的下一个小修订

1.新语言特性:变量模板(variable templates)、多态λ(polymorphic lambdas)、λ动捕获(move capture for lambdas)、new/delete elision、常量表达式函数放宽限制(relax restrictions on constexpr functions)、二值文本(binary literals)、数字分隔符(digit separators)、函数返回类型推演(return type deduction for functions)、用大括号或等号初始符集合初始化类
2.新库特性:std::make_unique、std::shared_mutex和std::shared_lock、std::index_sequence、std::exchange、std::quoted,还有许多针对现有库的小改进,比如一些算法的双距离重载(two-range overloads for some algorithms)、类型特征的类型别名版本(type alias versions of type traits)、用户定义字符串(user-defined string)、持续期(duration)和复杂数字文本(complex number literals)等等
3.搜集错误报告修复:149号库(149 library issues)
基础库技术规范(Library fundamentals TS), 文件系统技术规范(Filesystem TS)和其他专业技术规范( experimental technical specifications)

•2017 C++17
C++标准的下一个主要修订

C++历史(The History of C++)的更多相关文章

  1. 历史命令history

    历史命令在用户注销之后会保存在用户家目录下的-/.bash_history中 history #查看系统中实时缓存的历史命令,与.bash_history中的内容并不完全相同 history -c # ...

  2. linux查看历史命令history

    在linux下,我们有可能需要查看最近执行过的命令(历史命令),我们可以进行如下操作: # 显示使用过的所有历史命令 $ history # 显示最近使用的5个命令 $ history 5 我们可以通 ...

  3. linux 查看历史命令 history命令

    1.history命令 "history"命令就是历史记录.它显示了在终端中所执行过的所有命令的历史. history //显示终端执行过的命令 history 10 //显示最近 ...

  4. (1)前言——(10)jquery项目的历史(History of the jQuery project)

    This book covers the functionality and syntax of jQuery 1.6.x, the latest version at the time of wri ...

  5. linux显示历史命令history

    history history//显示历史命令

  6. 查看历史命令 history

    生产上有文件被清空了,想查查是谁操作的? 通过history查看历史命令: $history |more 也可以通过文件查看历史命令: $vi ~/.bash_history 只显示历史命令,像查一查 ...

  7. 记录用户操作历史命令history

    我们知道可以使用history命令,查看自己的操作记录,但如果你是root用户,如何查看其它用户的操作记录呢?   其实history命令只是把当前用户目录下的~/.bash_History文件内容列 ...

  8. linux下history命令显示历史指令记录的使用方法

    Linux系统当你在shell(控制台)中输入并执行命令时,shell会自动把你的命令记录到历史列表中,一般保存在用户目录下的.bash_history文件中.默认保存1000条,你也可以更改这个值 ...

  9. HTML5管理与实际历史的分析(history物)

    HTML5新进入历史的管理,更新history对象允许国家的经营历史更方便. 在现代Web应用.用户"前进"和"退却"button切换历史页面.这使得新的页码不 ...

  10. BOM 浏览器对象模型_当前窗口的浏览历史 history 对象

    当前窗口的浏览历史 window.history 对象 保存了当前窗口访问过的所有页面网址 由于安全原因,浏览器不允许脚本读取这些地址,但是允许在地址之间导航 history.back() 相当于 h ...

随机推荐

  1. CentOS6.8安装Redis3.2.5

    1.下载Redis3.2.5安装包           wget http://download.redis.io/releases/redis-3.2.5.tar.gz 2.解压.编译.安装redi ...

  2. DDD学习笔记一

    由于也是初学DDD,难免有很多不足和认识错误的地方.多数内容来自其他网络资料或者书籍. 参考:http://www.cnblogs.com/Leo_wl/p/4418663.html 希望多多提出宝贵 ...

  3. GTD_百度百科

    GTD就是Getting Things Done的缩写,翻译过来就是"把事情做完",GTD的核心理念概括就是必须记录下来要做的事,然后整理安排并自己一一去执行.GTD的五个核心原则 ...

  4. 黄聪:jquery mobile使用form进行post提交表单没有反应,显示空白页解决方案

    jquery mobile这货会自动用Ajax方式. 所以需要在表单form标签添加data-ajax="false"这个元素. <form method="pos ...

  5. Java heap dump触发和分析(转)

    为了分析java应用的内存泄漏,使用thread dump往往解决不了问题.使用jstat[eg:jstat-gcutil pid 1000 5]工具查看运行的java应用的heap size,per ...

  6. Blockchain概述--转

    编者按:著名投资人 Fred Wilson 的同事 Joel Monegro 近日参加了纽约比特币 workshop HackBit聚会,其间他们讨论了比特币式的思维方式对未来十年世界的影响,而这种影 ...

  7. [JS]学习Javascript闭包(Closure)

    转自:阮一峰 闭包(closure)是Javascript语言的一个难点,也是它的特色,很多高级应用都要依靠闭包实现. 下面就是我的学习笔记,对于Javascript初学者应该是很有用的. 一.变量的 ...

  8. Spark on Yarn年度知识整理

    大数据体系结构: Spark简介 Spark是整个BDAS的核心组件,是一个大数据分布式编程框架,不仅实现了MapReduce的算子map 函数和reduce函数及计算模型,还提供更为丰富的算子,如f ...

  9. Tomcat的8009端口AJP的利用

    Tomcat在安装的时候会有下面的界面,我们通常部署war,用的最多的是默认的8080端口. 可是当8080端口被防火墙封闭的时候,是否还有办法利用呢? 答案是可以的,可以通过AJP的8009端口,下 ...

  10. MySql 存储过程实例(附完整注释)

    将下面的语句复制粘贴可以一次性执行完,我已经测试过,没有问题! MySql存储过程简单实例:                                                       ...