C++的历史

本文由 伯乐在线 - honpey 翻译自 Albatross。欢迎加入 技术翻译小组。转载请参见文章末尾处的要求。

C++的历史可以追溯到1979年,当时Bjarne Stroustrup(译者注:C++之父)正在准备他的博士毕业论文,他有机会使用一种叫做Simula 的语言。顾名思义,Simula语言的主要作用是仿真。Simula 67是Simula语言的一种变种,被公认是首款支持面向对象的语言。Stroustrup发现面向对象的思想对于软件开发非常有用,但是因Simula语言执行效率低,其实用性不强。

不久之后,Stroustrup开始着手“C with Classes”的研发工作,“C with Classes”表明这种新语言是在C基础上研发的,是C语言的超集。C语言以其高可移植性而广受好评,且程序执行速度以及底层函数的性能不受程序移植的影响,Stroustrup要做的就是将面向对象的思想引入C语言。新语言的初始版本除了包括C语言的基本特征之外,还具备类、简单继承、内联机制、函数默认参数以及强类型检查等特性。

Bjarne Stroustrup的第一款“C with classes”编译器叫Cfront,这个名字源自一个叫做Cpre的C编译器。Cfront的机理是把“C with classes”的代码翻译成原生C代码。颇为有趣的一点是Cfront源码大部分是由“C with Classes”编写,这使得Cfront成为了一种自足执行的编译器(可以编译自身源码的编译器)。由于很难整合C++的异常机制,Cfront在1993年退出了历史的舞台,但是它对以后C++编译器以及Unix操作系统的实现都产生了深远的影响。

1983年,“C with Classes”语言更名为C++。C语言中“++”运算子的作用是对一个变量进行递增操作,由此我们多少可以知晓Stroustrup对这种新语言的定位。这个时期,许多重要的特性被加入,其中包括虚函数、函数重载、引用机制(符号为&)、const关键字以及双斜线的单行注释(从BCPL语言引入)。

1985年,Stroustrup的C++参考手册《C++ Programming Language》出版,同年,C++的商业版本问世。由于当时C++并没有正式的语言规范,因此《C++ Programming Language》成了业界的重要参考。1989年,C++再次版本更新,这次更新引入了多重继承、保护成员以及静态成员等语言特性。

1990年,《Annotated C++ Reference Manual》发布,同年,Borland公司的商业版Turbo C++编译器问世。Turbo C++附带了大量函数库,这一举措对C++开发产生了极为深远的影响。虽然Turbo C++上一个稳定的版本发布于2006年,但当前该编译器仍被广泛使用。

1998年,C++标准委员会发布了C++语言的第一个国际标准—ISO/IEC 14882:1998,该标准即为大名鼎鼎的C++98。C++98的提出,《The Annotated C++ Reference Manual》功不可没。同时,1979年开始研发的标准模板库(Standard Template Library,STL)也被纳入了该版标准中。2003年,标准委员会针对98版本中存在的诸多问题进行了修订,修订后发布了C++03。

2005年,C++标准委员会发布了一份技术报告(Technical Report,TR1)详细说明了计划引入C++的新特性。这个新标准被非正式地命名为C++0x,因为其预计会在本世纪第一个十年的某个时间发布。讽刺的是,直到2011年年中该标准才面世,相应的技术文档也随之出炉,一些编译器厂商也开始试验性地支持这些新特性。

2011年中,新的C++标准(C++11)面世。Boost库对该版本影响很大,一些新的模块甚至直接衍生于Boost中相应的模块。一些新的语言特性,包括正则表达式(正则表达式详情)、完备的随机数生成函数库、新的时间相关函数,原子操作支持、标准线程库(2011之前,C和C++语言均缺少对线程的支持)、一种能够和某些语言中foreach语句达到相同效果的新的for语法、auto关键字、新的容器类、更好的union支持、数组初始化列表的支持以及变参模板的支持等等。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/447961.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

asp.net ajax的学习第一篇

自己理解的asp.net ajax的核心思想&#xff1a; javascript 调用web service <?xml:namespace prefix o ns "urn:schemas-microsoft-com:office:office" />由于工作的原因&#xff0c;要在自己的网页上使用无刷新技术&#xff0c;增加客户体验。开始学习asp…

insertSelective 和 insert 的区别

前些天发现了一个巨牛的人工智能学习网站&#xff0c;通俗易懂&#xff0c;风趣幽默&#xff0c;忍不住分享一下给大家。点击跳转到教程。 1、selective的意思是&#xff1a;选择性。 2、insertSelective--选择性保存数据&#xff1b; 比如User里面有三个字段:id&#xff0c;n…

病从口入 这样吃小心癌症找上门

肿瘤专家估计&#xff0c;大约有35%的致癌物质是经过饮食&#xff0c;30%是经过吸烟侵入体内的。仅此两项已经占了致癌因素入侵人体的一半以上了。所以说&#xff0c;预防肿瘤&#xff0c;饮食首当其冲&#xff0c;第一步就要从入口的食物谈起。 食管癌&#xff1a;腌制的咸…

VUE插件总结

UI组件 element - 饿了么出品的Vue2的web UI工具套件Vux - 基于Vue和WeUI的组件库mint-ui - Vue 2的移动UI元素iview - 基于 Vuejs 的开源 UI 组件库Keen-UI - 轻量级的基本UI组件合集vue-material - 通过Vue Material和Vue 2建立精美的app应用muse-ui - 三端样式一致的响应式 …

解决:No goals have been specified for this build. You must specify a valid lifecycle phase or a goal i

前些天发现了一个巨牛的人工智能学习网站&#xff0c;通俗易懂&#xff0c;风趣幽默&#xff0c;忍不住分享一下给大家。点击跳转到教程。 1. 执行打包命令报错&#xff1a; No goals have been specified for this build. You must specify a valid lifecycle phase or a goa…

十个好习惯帮你理财省大钱

理财和收入高低其实是没有关系的&#xff0c;仅和生活习惯相关。有了好的理财方法&#xff0c;也可以攒下自己的钱&#xff0c;达到财务自由的境界。下面是一些理财的技巧? 1、定时积极的存款 怎样开源节流是理财的第一步。增加收入来源&#xff0c;算好该存的钱&#xff0…

生成随机码,保存随机文件.

PrivateFunction GetRandomizeNo()Function GetRandomizeNo() As Integer 功能说明:生成随机验证码 Dim RandomizeNo As Integer Randomize() RandomizeNo 9999 * Rnd() 1000 If (RandomizeNo).ToString.Length > 5 Then R…

解决:org.apache.ibatis.binding.BindingException: Invalid bound statement (not found) ...

前些天发现了一个巨牛的人工智能学习网站&#xff0c;通俗易懂&#xff0c;风趣幽默&#xff0c;忍不住分享一下给大家。点击跳转到教程。 org.apache.ibatis.binding.BindingException: Invalid bound statement (not found)问题&#xff0c;即在mybatis中dao接口与mapper配置…

真实股市房市信托本质,金融故事三则:钱都去哪儿了?

什么叫做虚拟经济、泡沫经济、次贷危机、金融危机?看完本文这几个简短精辟故事&#xff0c;你就都知道了。 故事&#xff08;1&#xff09; 有一个商人到了一个山村&#xff0c;村子周围的山上全是猴子。 商人就和村子种地的农民说&#xff0c;我买猴子&#xff0c;100元一只…

Mac 远程命令工具

转载于:https://www.cnblogs.com/BrightMoon/p/4479375.html

Springboot Mybatis 整合(完整版)

前些天发现了一个巨牛的人工智能学习网站&#xff0c;通俗易懂&#xff0c;风趣幽默&#xff0c;忍不住分享一下给大家。点击跳转到教程。 正题 本项目使用的环境&#xff1a; 开发工具&#xff1a;Intellij IDEA 2017.1.3 springboot: 1.5.6 jdk&#xff1a;1.8.0_161 maven…

OpenCL 第5课:向量相加

OpenCL程序分为两个部份&#xff0c;一部份是内核代码&#xff0c;负责具体算法。另一部份是主程序负责初始化OpenCL和准备数据。主程序加载内核代码&#xff0c;并按照即定方法进行运算。 内核代码可以写在主程序里面&#xff0c;也可以写在另一个文本文件里&#xff0c;有点…

同名的const 成员函数

如下代码&#xff1a;struct Derived{ void foo(string) { cout<<"ddd foo"<<endl; }; void foo(string) const { cout<<"ddd foo const"<<endl; };}; int _tmain(int argc, TCH…

springboot 中使用 Mybatis 注解 配置 详解

前些天发现了一个巨牛的人工智能学习网站&#xff0c;通俗易懂&#xff0c;风趣幽默&#xff0c;忍不住分享一下给大家。点击跳转到教程。 传参方式 使用不同的传参方式&#xff1a; 使用Param 之前博文中的项目使用了这种简单的传参方式&#xff1a; Insert("INSERT IN…

mongodb数据库的备份与恢复

先介绍下命令语法&#xff1a; ./mongodump -h 127.0.0.1:10001 -d lietou -o /usr/local/data -h&#xff1a;MongDB所在服务器地址&#xff0c;例如&#xff1a;127.0.0.1&#xff0c;当然也可以指定端口号&#xff1a;127.0.0.1:10001 -d&#xff1a;需要备份的数据库实例…

OpenCL 第6课:矩阵转置

上一节我们写了个一维向量相加的程序。这节我们来看一个44矩阵转置程序。 4X4矩阵我们采用二维数组进行存储&#xff0c;在程序设计上&#xff0c;我们让转置过程分4次转置完成&#xff0c;就是一次转一行。注意这里的OpenCL的工作维数是二维。&#xff08;当然用一维的方式也…

springboot 系列技术教程目录

前些天发现了一个巨牛的人工智能学习网站&#xff0c;通俗易懂&#xff0c;风趣幽默&#xff0c;忍不住分享一下给大家。点击跳转到教程。 一、教程目录地址&#xff1a; springboot系列技术教程目录 二、教程内容&#xff1a; springboot2.X系列&#xff1a; springboot整…

OpenCL 第7课:旋转变换(1)

旋转是一个常用的处理功能。图片中所有的点以某一个点为轴&#xff0c;顺时或逆时方向旋转N个角度。我们利用OpenCL就可以对图片中所有的点进行并行转换&#xff0c;大大提高效率。 上两节中&#xff0c;我们编写了CL文件来传递数组的地址&#xff0c;这一节中我们会多加入几个…

WinForms多线程编程之摇奖程序

利用多线程模拟一个电脑摇奖程序&#xff0c;如图所示。在点击【滚动号码】&#xff0c;启动线程&#xff0c;对后台的电话号码进行循环显示&#xff1b;点击【开奖】按钮&#xff0c;关闭线程&#xff0c;此时显示在文本框中的电话号码即为中奖号码 using System;using System…

idea 版本控制忽略文件、文件夹设置

前些天发现了一个巨牛的人工智能学习网站&#xff0c;通俗易懂&#xff0c;风趣幽默&#xff0c;忍不住分享一下给大家。点击跳转到教程。 setting 中&#xff1a; 或者底部的 设置 忽略某个文件 后面选择框可以去选择 忽略某个文件夹 后面选择框可以去选择 忽略某种文件 后面…