前言
哈!这是第一篇C++的有关内容,就来介绍一下C++的历史和一些我的看法吧
PS:Cpp == C plus plus == C++
一、什么是C++?
不如先来看看我们的祖师爷Bjarne Stroustrup吧!
C语言是结构化和模块化的语言,适合处理较小规模的程序。对于复杂的问题,规模较大的程序,需要高度
的抽象和建模时,C语言则不合适。为了解决软件危机, 20世纪80年代, 计算机界提出了OOP(object
oriented programming:面向对象)思想,支持面向对象的程序设计语言应运而生。
什么是面向对象?为什么C语言不太行?没事,你先这样记着,之后会慢慢讲解
1982年,Bjarne Stroustrup博士在C语言的基础上引入并扩充了面向对象的概念,发明了一种新的程序语
言。为了表达该语言与C语言的渊源关系,命名为C++(现在来看,本杰明老先生还是比较谦虚的)。因此:C++是基于C语言而产生的,它既可以进行C语言的过程化程序设计,又可以进行以抽象数据类型为特点的基于对象的程序设计,还可以进行面向对象的程序设计。
Cpp兼容C的 98% ~ 99% 的语法
二、C++的发展历程
前文也说了C++是在C的基础上发展而来的,根源在于模块化的需求,具体来说,1972年的贝尔实验室,本贾尼等人试图分析unix内核的时候,试图将内核模块化,于是对C语言增加了类的机制,完成了一个可以运行的预处理程序,称之为C with classes
语言的发展就像是练功打怪升级一样,也是逐步递进,由浅入深的过程。我们先来看下C++的历史版本:
阶段 | 内容 |
---|---|
C with classes | 类及派生类、公有和私有成员、类的构造析构、友元、内联函数、赋值运算符重载等 |
C++1.0 | 添加虚函数概念,函数和运算符重载,引用、常量等 |
C++2.0 | 更加完善支持面向对象,新增保护成员、多重继承、对象的初始化、抽象类、静态成员以及const成员函数 |
C++3.0 | 进一步完善,引入模板,解决多重继承产生的二义性问题和相应构造和析构的处理 |
C++98 | C++标准第一个版本,绝大多数编译器都支持,得到了国际标准化组织(ISO)和美国标准化协会认可,以模板方式重写C++标准库,引入了STL(标准模板库) |
C++03 | C++标准第二个版本,语言特性无大改变,主要∶修订错误、减少多异性 |
C++05 | C++标准委员会发布了一份计数报告(Technical Report,TR1),正式更名C++0x,即∶计划在本世纪第一个10年的某个时间发布 |
C++11 | 增加了许多特性,使得C++更像一种新语言,比如∶正则表达式、基于范围for循环、auto关键字、新容器、列表初始化、标准线程库等 |
C++14 | 对C++11的扩展,主要是修复C++11中漏洞以及改进,比如∶泛型的lambda表达式,auto的返回值类型推导,二进制字面常量等 |
C++17 | 在C++11上做了一些小幅改进,增加了19个新特性,比如∶static_assert()的文本信息可选,Fold表达式用于可变的模板,if和switch语句中的初始化器等 |
C++20 | 自C++11以来最大的发行版,引入了许多新的特性,比如:模块(Modules)、协程(Coroutines)、范围(Ranges)、概念(Constraints) 等重大特性,还有对已有特性的更新:比如Lambda支持模板、范围for支持初始化等 |
C++23 | C++23是一个小版本更新,进一步完善和改进现有特性,增加了if consteval、数、falt_map、import std导入标准库等 |
三、C++的重要性
我们总得知道学了C++能干什么,意义在哪里?
根据TIOBE信息数据显示,C++ 拥有广泛的受众人群:
在工作领域中,以下场景都会用到C++:
1.操作系统以及大型系统软件开发
所有操作系统几乎都是C/C++写的,许多大型软件背后几乎都是C++写的,比如:Photoshop、Office、JVM(Java虚拟机)等,究其原因还是性能高,可以直接操控硬件。
2.服务器端开发
后台开发:主要侧重于业务逻辑的处理,即对于前端请求后端给出对应的响应,现在主流采用java,但内卷化比较严重,大厂可能会有C++后台开发,主要做一些基础组件,中间件、缓存、分布式存储等。服务器端开发比后台开发跟广泛,包含后台开发,一般对实时性要求比较高的,比如游戏服务器、流媒体服务器、网络通讯等都采用C++开发的。
看起来很酷,我是真的喜欢这个
3.游戏开发
PC平台几乎所有的游戏都是C++写的,比如:魔兽世界、传奇、CS、跑跑卡丁车等,市面上相当多的游戏引擎都是基于C++开发的,比如:Cocos2d、虚幻4、DirectX等。三维游戏领域计算量非常庞大,底层的数学全都是矩阵变换,想要画面精美、内容丰富、游戏实时性高,这些高难度需求无疑只能选C++语言。比较知名厂商:腾讯、网易、完美世界、巨人网络等。
其实,计算机学到深,数学也很重要
4.嵌入式和物联网领域
嵌入式:就是把具有计算能力的主控板嵌入到机器装置或者电子装置的内部,能够控制这些装置。比
如:智能手环、摄像头、扫地机器人、智能音响等。
谈到嵌入式开发,大家最能想到的就是单片机开发(即在8位、16位或者32位单片机产品或者裸机上进行的开发),嵌入式开发除了单片机开发以外,还包含在soc片上、系统层面、驱动层面以及应用、中间件层面的开发。
常见的岗位有:嵌入式开发工程师、驱动开发工程师、系统开发工程师、Linux开发工程师、固件开发
工程师等。
除此以外,数字图像处理、人工智能、 分布式应用都有C++的身影
四、一些C++的常见疑问
C++难不难?
相信很多人都听说过C++是最难的一门语言,对此,比较客观的看法是什么呢?
答案是确实挺难的,说是最难之一完全不为过,它的缺点就是难学难精,一两年之内能正常使用就相当不错了
C++如何学?
1.写博客,C++语法很复杂,像我这样记下博客,后期复习帮助很大,整理成体系
2.常看书,切记贪,缓缓图之是一门智慧,不然可能会走火入魔
网络上很多人推荐《C++ Primer》,嗯~怎么说呢,《中国汉字词典》是一本好书,但是你学语文不会拿来翻的,同样,把它作为词典书,就是这个意思
总结
第一篇总是轻松的,但是打起精神,C++,要来力!~
其实,C++也是一门哲学,或者往大了说,编程境界高了也是一门艺术