C++语言介绍

发布于:2024-07-11 ⋅ 阅读:(28) ⋅ 点赞:(0)

个人主页:Jason_from_China-CSDN博客

所属栏目:C++系统性学习_Jason_from_China的博客-CSDN博客

前言

C++入门课程我分为上下两个篇章

(上):C++语言介绍,主要讲解C++的发展历程,由来,祖师爷,以及学习难度,学习曲线,以及自学的书籍推荐,或者课程推荐

(下):C++入门基础,为C++的正式开启-类和对象,做语法铺垫

C++的发展历史

C++的起源可以追溯到1979年,当时Bjarne Stroustrup(本贾尼·斯特劳斯特卢普,这个翻译的名字不同的地方可能有差异)在贝尔实验室从事计算机科学和软件工程的研究工作。面对项目中复杂的软件开发任务,特别是模拟和操作系统的开发动机工作,他感受到了现有语言(如C语言)在表达能力、可维护性和可扩展性方面的不足。

1983年,Bjarne Stroustrup在C语言的基础上添加了面向对象编程的特性,设计出了C++语言的雏形,此时的C++已经有了类、封装、继承等核心概念,为后来的面向对象编程奠定了基础。这一年该语言被正式命名为C++。在随后的几年中,C++在学术界和工业界的应用逐渐增多。一些大学和研究所开始将C++作为教学和研究的首选语言,而一些公司也开始在产品开发中尝试使用C++。这一时期,C++的标准库和模板等特性也得到了进一步的完善和发展。

C++的标准化工作于1989年开始,并成立了一个ANSI和ISO(International Standards Organization)国际标准化组织的联合标准化委员会。1994年标准化委员会提出了第一个标准化草案。在该草案中,委员会在保持斯特劳斯特卢普最初定义的所有特征的同时,还增加了部分新特征。在完成C++标准化的第一个草案后不久,STL(Standard Template Library)是惠普实验室开发的一系列软件的统称。它是由Alexander Stepanov、Meng Lee和David R Musser在惠普实验室工作时所开发出来的。在通过了标准化第一个草案之后,联合标准化委员会投票并通过了将STL包含到C++标准中的提议。STL对C++的扩展超出C++的最初定义范围。虽然在标准中增加STL是个很重要的决定,但也因此延缓了C++标准化的进程。

1997年11月14日,联合标准化委员会通过了该标准的最终草案。1998年,C++的ANSI/ISO标准被投入使用。

祖师爷图片

我们经常会开玩笑的说啊,用C++的时候,我们拜一拜祖师爷,保佑我们少写一点bug

C++的版本更新

关于C++版本的更新

C with classes
类及派生类、公有和私有成员、类的构造和析构、友元、内联函数、赋值运算符
重载等
C++1.0
添加虚函数概念,函数和运算符重载,引用、常量等
C++2.0
更加完善支持面向对象,新增保护成员、多重继承、对象的初始化、抽象类、静
态成员以及 const 成员函数
C++3.0
进一步完善,引入模板,解决多重继承产生的二义性问题和相应构造和析构的处
1998年(C++98)
C++官方第一个版本,绝大多数编译器都支持,得到了国际标准化组织(ISO)和协会认可,以模板方式重写C++标准库,引入了STL(标准模板库)

2003年(C++03)
这是C++标准的一个重大修订,主要聚焦于语言的稳定性和兼容性。C++03修+98标准中的错误和漏洞,同时引入了一些新的特性和功能,如tr1库(Techn1)

2011年(C++11)
这是一次革命性的更新,增加了大量的新特性和功能,使得C++更像一种新语lambda、范围for、右值引用和移动语义、边长模版参数、STL的容器和核心能指针、标准线程库等

2014年(C++14)
对C++11的扩展,主要是修复C++11中漏洞以及改进,比如:泛型的入的返回值类型推导,二进制字面常量等

2017年(C++17)
C++17进一步增强了C++的功能和表达能力。这次更新引入了ifconstexpr、结折叠表达式等语法特性,同时改进了标准库中的多个组件,如字符串、文件系统

2020年(C++20)
C++20是C++历史上的又一个重要里程碑。这次更新引入了一系列新特性和改(Coroutines)、概念(Concepts)、模块化(Modules)等,为C++的未来坚实的基础。
2023年(C++23)
C++23是一个小版本更新,进一步完善和改进现有特性,增加了ifconst eval,数、falt map,导入标准库等
我们可以看到,除了前两次更新的时候不是很稳定,被人很是诟病。因为过于被人诟病,所以从11年以后,C++更新时间稳定在三年一次。
原本预计23年是大版本的更新,但是因为疫情的原因,导致沟通不及时,从上变成了小版本的更新

关于C++版本的使用

  • 对于传统的公司和学校,基本上还是用C++98。因为新版本的东西需要用新的编译器 越是新稳定的东西 越是不会更新新版本
  • 对于主流版本主要还是用到了C++11,这里是大多数学校教学版本,以及大部分企业使用版本
  • 对于新的一些企业,会用到C++20,这算是比较新的版本了
  • C++被诟病的点有一点,C++一直被诟病的东西就是网络库
  • C++ 出现以后,不时会有新的编程语言要取代 C++ 的地位,到目前为止,还没有这样的语言出现。C++ 依旧生机勃勃,在大模型数据处理领域也越发重要。

C++和其他编程语言的对比

课程推荐

之前我写过一篇关于一些编程语言介绍以及对比,以及课程推荐,有兴趣的可以去看一下

编程语言新榜

python写一些脚本语言,是很方便的,核心算法的实现还是c/c++,上层语言python多一点

c#是微软开发的windows适配的语言和c/c++没有关系

swift客户端开发

语言是一个工具,基本上学好一门语言上手其他的很容易

每个语言都有函数,都有if判断,都有异常

世界上有三大人种,但是本质上都是人

你学完c++,你可能接触go可能接触python

框架差不多,可能也就是前期框架使用的时候有点问题,本质没有什么问题

我们可以理解为python就是电动车,好用,用的人多,但是也不是主要的交通工具

会python的人很多,但是python不是主语言

python是一个解释性的语言

c++语言难学一点,因为不仅要兼容C语言

而且追求极致效率,

产生的比较早,没有作业可以抄,

就像多继承概念,其实c++只是语法层面多百分之三十的成本

但是c++方向的学习和JAVA语言方向的学习,整体在伯仲之间

Linux比c++难多了

JAVA语言难点在于框架和多线程

c++自学的话,确实有点难度

C++的岗位需求和发展方向

一,软件开发:

所有操作系统几乎都是C/C++写的,许多大型软件背后几乎都是C++写的,比如:Photoshop、Office、JVM(Java虚拟机)等,究其原因还是性能高,可以直接操控硬件

1,软件开发

2,qt开发(客户端开发)

3,CAD开发

4,军工类开发

5,数据库开发

二,服务器开发

后台开发:主要侧重于业务逻辑的处理,即对于前端请求后端给出对应的响应,现在主流采用java,但内卷化比较严重,大厂可能会有C++后台开发,主要做一些基础组件,中间件、缓存、分布式存储等。服务器端开发比后台开发跟广泛,包含后台开发,一般对实时性要求比较高的,比如游戏服务器、流媒体服务器、网络通讯等都采用C++开发的。

滴滴,美团,上架下架菜单,数据存储,网络通信,

三,游戏开发

会游戏开发的往往需要一些其他语言,

四,嵌入式

嵌入式:就是把具有计算能力的主控板嵌入到机器装置或者电子装置的内部,能够控制这些装置。比如:智能手环、摄像头、扫地机器人、智能音响等。谈到嵌入式开发,大家最能想到的就是单片机开发(即在8位、16位或者32位单片机产品或者裸机上进行的开发),嵌入式开发除了单片机开发以外,还包含在soc片上、系统层面、驱动层面以及应用、中间件层面的开发。
常见的岗位有:嵌入式开发工程师、驱动开发工程师、系统开发工程师、Linux开发工程师、固件开发工程师等。
知名的一些厂商,比如:以华为、vivo、oppo、小米为代表的手机厂;以紫光展锐、乐鑫为代表的芯片厂;以大疆、海康威视、大华、CVTE等具有自己终端业务厂商;以及海尔、海信、格力等传统家电行业。
随着5G的普及,物联网(即万物互联,)也成为了一种新兴势力,比如:阿里lot、腾讯lot、京东、百度、美团等都有硬件相关的事业部。

适合驱动型的开发

硬件开发不是特别适合

五,数字图像开发(不是特别适合)

数字图像处理中涉及到大量数学矩阵方面的运算,对CPU算力要求比较高,主要的图像处理算法库和开源库等都是C/C++写的,比如:0penCV、OpenGL等,大名鼎鼎的Photoshop就是C++写的。

六,人工智能(上层python下层就是c++)

但是我们不适合人工智能,这里主要是数学,和神经网络的开发。

一提到人工智能,大家首先想到的就是python,认为学习人工智能就要学习python,这个是误区,python中库比较丰富,使用python可以快速搭建神经网络、填入参数导入数据就可以开始训练模型了。但人工智能背后深度学习算法等核心还是用C++写的。

七,分布式应用

近年来移动互联网的兴起,各应用数据量业务量不断攀升;后端架构要不断提高性能和并发能力才能应对大信息时代的来临。在分布式领域,好些分布式框架、文件系统、中间组件等都是C++开发的。对分布式计算影响极大的Hadoop生态的几个重量级组件:HDFSzookeeper、HBase等,也都是基于Google用C++实现的GFS、Chubby、BigTable。包括分布式计算框架MapReduce也是Google先用C++实现了一套,之后才有开源的iava版本。除了上述领域外,在:科学计算、浏览器、流媒体开发、网络软件等都是C++比较适合的场景作为一名老牌语言的常青树,C++一直霸占编程语言前5名,肯定有其存在的价值。

八,安卓的开发

Android底层

但是安卓的开发写的是安卓的底层

就像腾讯,开发游戏或者什么东西的时候,需要从安卓底层写东西,配合一点其他语言

这里JAVA语言的岗位整体是比c++多的

这里是c++的方向多,所以c++的学习思路偏向于底层

岗位需求

这是boss随便找的

c++官网和几个网站推荐

c++官网

cppreference.comicon-default.png?t=N7T8https://en.cppreference.com/w/

C++语法搜索网站

这个网站也是很好用的

cplusplus.com/reference/cstdio/icon-default.png?t=N7T8https://cplusplus.com/reference/cstdio/这个是新页面,是没有搜索框的

点击进去,这里有一个搜索框,可以搜索C/C++的语法

C++语法搜索网站

C 关键词 - cppreference.comicon-default.png?t=N7T8https://zh.cppreference.com/w/c/keyword

C++书籍推荐

21天学会C++

这里开个玩笑

书籍推荐

这里要看清楚书籍的封面

C++ Primer:

这是一部主要讲解C++语法的经典书籍,适合不同阶段的读者。对于初学者来说,如果自学可能会觉得有些晦涩难懂,但是可以根据自己的理解能力阅读,作为预习材料。在完成一定的基础课程学习后,可以在中后期将其作为语法参考手册,非常实用。

STL源码剖析:

这本书从底层实现的角度出发,结合STL的源代码,进行深入的剖析。侯捷老师的经典之作,能够帮助读者学习如何使用C++语法实现高效简洁的数据结构和算法代码,以及如何进行泛型封装等。本书适合在课程学习过半之后,中后期阅读。

Effective C++:

这本书由侯捷老师翻译,被誉为将C++程序员分为看过和没看过此书的两类人。书中提供了55条关于如何正确高效使用C++的指导原则。建议在中后期阅读一遍,工作1-2年后再读一遍,相信会有不同的收获和体会。

注意

c++primer:作为语法字典

因为还有个c++primerplus 这里推荐c++primer 虽然第二本也很经典

effctive c++(这本书很好):这本书被称之为看过这本书的和没有看过这本书的

stl源码剖析:这本书讲解的是c++是算法分析和库的解析

学习不能闭门造车和坐井观天

这里想好好看的话其实,更推荐买一本书, 不是电子版 ,电子版很多都是老版本

注意这些都是后期的书,前期不需要看书,都是中后期需要看书的

前期建议看看视频,当然看书也没有问题