前言
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++官网
C++语法搜索网站
这个网站也是很好用的
cplusplus.com/reference/cstdio/https://cplusplus.com/reference/cstdio/这个是新页面,是没有搜索框的
点击进去,这里有一个搜索框,可以搜索C/C++的语法
C++语法搜索网站
C 关键词 - cppreference.comhttps://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++是算法分析和库的解析
学习不能闭门造车和坐井观天
这里想好好看的话其实,更推荐买一本书, 不是电子版 ,电子版很多都是老版本
注意这些都是后期的书,前期不需要看书,都是中后期需要看书的
前期建议看看视频,当然看书也没有问题