C++是一门以C为基础发展而来的一门面向对象的高级程序设计语言,从1983年由Bjarne Stroustrup教授在贝尔实验室创立开始至今,已有30多个年头。
C++从最初的C with class,经历了从C++98、C++ 03、C++ 11、C++ 14再到C++17多次标准化改造,功能得到了极大的丰富,已经演变为一门集面向过程、面向对象、函数式、泛型和元编程等多种编程范式的复杂编程语言,入门具有一定的难度。
由于C++过于复杂,并且经历了长时间的发展演变,目前对于C++标准支持的较好主要有GNU C++和Visual C++,严格来说,目前还没有一个完全支持ISO C++的版本。
1954年,John Backus发明了世界上第一种计算机高级语言Fortran,为之后出现的高级编程语言奠定了基础。
1970年,AT&T的Bell实验室的 Ken Thompson,以BCPL语言为基础,设计出简单且接近硬件的B语言(取BCPL的首字母),并且他用B语言写了第一个Unix操作系统。
到了1972年,Bell实验室的Dennis Ritchie和Ken Thompson共同发明了C语言,并使用C重写Unix。
1979年,Bjame Stroustrup到了Bell实验室,开始从事将C改良为带类的C(C with Classes)的工作,1983年该语言被正式命名为C++,主要意图是表明C++是C的增强版,1985年发布了第一个C++版本。
第一个版本的C++,因其面向对象的思想使得编程变得简单,并且又保持了C语言的运行效率,在推出的一段时间内,得到了快速的发展,占据了编程语言界的半壁江山。
从1985年到1998年,C++从最初的C with Classes新增了很多其他的特性,比如异常处理、模板、标准模板库(STL)、运行时异常处理(RTTI)与名字空间(Namespace)等。
1998年,C++标准委员会统筹C++的所有特性,发布了第一个C++国际标准C++98。
从1998年到2003年,是C++标准从C++98到C++03的迭代期,期间C++扩增了很多额外的特性,比如以Boost MPL(Boost Metaprogramming Library)与Loki等为代表的模板元编程库的出现,让开发者更加便捷的使用C++在编译器的执行能力,即通过代码编译获得计算结果,学术性的称为模板元编程。
到了2003年,C++标准委员会总结最新技术并发布了C++03标准。
从2003年到2011年,也就是从C++03到C++11,期间C++引入了对象移动、右值引用、lamba表达式(函数式编程)、编译时类型识别(auto)、别名模板以及很多新型关键词(如nullptr、decltype、constexpr)等现代编程语言常具备的能力,让C++与时俱进,开发效率得到了很大的提升。这些新的特性随着C++11标准的发布而被正式确立下来。
近年来,C++标准的变更周期缩短,由C++11到C++14以及最近的C++17都只用了3年的时间。
C++14引入了二进制文字常量、将类型推导从Lambda函数扩展到所有函数、变量模板以及数字分位符等。
C++14 是对 C++11的重要补充和优化,是C++发展历程中的一个小型版本,虽然新增的内容较少,但是仍然为用户“带来了极大的方便”,为实现使C++“对新手更为友好”这一目标作出努力。
到了2017年,C++迎来了C++17标准。
此次对C++的改进和扩增,让C++变得更加容易接受和便于使用了。
C++17引入了许多新的特性,比如类模板参数推导、UTF-8文字常量、fold表达式、新类型以及新的库函数等。
C++仍在不断的发展,下一个版本将是C++20,C++历史上的标准变更如下。
年份C++ 标准名称非正式名称
语言的发展是一个逐步递进的过程,C语言也不例外,C语言也有自己的标准。
C语言从1972诞生以来,先后经历了K&R C、ANSI C、C89、C99和最新的C11标准的变更,其特性不断丰富,功能不断强大。
语言的发展也是相互促进和交融吸收的,C++是直接从C语言发展过来的,而C语言是从B语言发展过来的,B语言则是从BCPL发展而来,BCPL(Basic CPL)则从CPL发展而来,CPL则从ALGOL60演变而来。
每一门新语言的诞生以及后续的演变和发展,都站在了其他语言的肩膀之上,取其精华,弃其糟粕,让语言变得更加的强大。
优缺点:
现在的趋势是多语言混成编程,故本文是针对混合编程。
1、C++优势:
1.1 性能优势。
1.2 可进化性(可复用性),进化出本团队顺手的类库。
2、C++小的优势或疑似优势:
2.1 “万金油”。混合编程时代,“万金油”价值小。
相对于其他的语言,C++具有它自己的优势,主要体现在以下几个方面:
1、 C++实现了面向对象程序设计。在高级语言当中,处理运行速度是最快的,大部分的游戏软件,系统都是由C++来编写的。
2、 C++语言非常灵活,功能非常强大。如果说C语言的优点是指针,那么C++的优点就是性能和类层次结构的设计。
3、C++非常严谨、精确和数理化,标准定义很细致。
4、 C++语言的语法思路层次分明、相呼应;语法结构是显式的、明确的。
当然,这只是C++的一部分优势,在运用过程中,我们会逐渐发现C++语言之美。
3、C++根本缺点:
难学。新手被指针搞死,
中手(约3年工作经验)被stl标准库和模板搞死,
高手(约5年工作经验)被boost搞死。由于stl难懂,大量的项目禁用stl。
我曾经看了一段20行的stl代码,看了30分钟,发现两行代码(两个for)就可以搞定。csdn有一个真实的案例,某个项目有了较多的boost,那人离职后,项目就费了。请一个boost高手的成本比重写项目还高。
4、缓解的方法:
C++软件工程师进一步分工:
a,新手主要负责界面,只需要会使用指针,无需管理指针。管理指针封装在基础库中。
b,中手老手负责逻辑层。
c,专人负责与数据库打交道。
5、C++非根本缺点:
5.1可理解性差。“难学”引起,其实熟悉stl的人看熟悉stl的人代码很好理解。解决方法:
a,分成若干个库,新手参与的库,禁止或少用stl。
b,stl中的常用功能,重写在一个新库中,此库可理解性最重要。
6、小缺点或不是缺点。
6.1.门槛高。新手无需用到指针管理、内存管理、线程管理,直接用stl的vector或MFC的CArray分配空间。内存管理、线程管理一个产品、项目只需要一个人会,就可以了。
6.2,开发效率低。如果有多年积累的基础库,开发效率反而高。因为这些基础库,是非常适合当前团队的。
6.3,初级程序员易犯错误。初级程序员,只有权限修改少量库(以界面居多)。
宽泛点来说,从结果角度上看C几乎什么都能做,C++几乎什么都能做好。但是从开发成本上说,很多情况下C/C++不是最好的选择。眼下C最主要的使用领域应该是Unix系系统的开发以及某些Unix系系统的软件的相关开发。C++恐怕还是游戏开发。
作为通用语言,可以适应各种类型的开发算是必备属性(同理,Java其实也是几乎什么都能做,只是限制相对来说要大一点并且很多事情做不了那么好)。
C/C++的规则比较宽泛,可以用来进行一些更贴近硬件的开发,而大部分C/C++开发环境也是这么做的。这造成相对来说用C/C++开发往往对其他语言的依赖比较小。
C++方面,因为C++还同时具有完整的元编程功能(虽然并不特别好用),使得在保证功能的前提下也是目前性能最高的语言没有之一。
所以当开发一个软件特别是对性能有需求的软件的时候,就算别的开发语言都不能用,最后总还是有C++可以用。
对于热爱编程的人来说,有一群一起学习一起解答的小伙伴很重要!
小编有一个免费的C/C++编程学习交流俱乐部,【点击进入】!
还有编程学习文件(源码,零基础教程,项目实战教学视频),欢迎初学者和正在进阶中的小伙伴们!