【C++入门篇】——你了解多少C++?
C++的发展历史
C++的起源可以追溯到1979年,当时Bjarne Stroustrup(C++之父)(本贾尼·斯特劳斯特卢普,翻译可能有差异)在贝尔实验室从事计算机科学和软件工程的研究工作。面对项目中复杂的软件开发任务,特别是模拟和操作系统的开发工作,他感受到了现有语言(如C语言)在表达能力、可维护性和可扩展性方面的不足。
1983年,Bjarne Stroustrup在C语⾔的基础上添加了面向对象编程的特性,设计出了C++语⾔的雏形 (C++兼容C语言),此时的C++已经有了类、封装、继承等核新概念,为后来的面向对象编程奠定了基础。这⼀年该语⾔被正式命名为C++。
在随后的几年中,C++在学术界和工业界的应用逐渐增多。⼀些大学和研究所开始将C++作为教学和研究的⾸选语⾔,而一些公司也开始在产品开发中尝试使⽤C++。这一时期,C++的标准库和模板等特性也得到了进⼀步的完善和发展。
C++的标准化⼯作于1989年开始,并成立了⼀个ANSI和ISO(International StandardsOrganization)国际标准化组织的联合标准化委员会。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/IS0标准被投⼊使⽤。
C++之父——Bjarne Stroustrup(致敬🫡)
C++版本更新
C++23本来也是一个大的版本,但是由于一直没出网络(networking)被诟病,networking之前是在C++23的计划中的,现在C++23已经发布了,但是没有networking,⽹上引发了⼀系列的吃⽠和吐槽😆。
C++参考文档
说明:
- 第一个链接不是C++官方文档,标准也只更新到C++11,但是以头文件形式呈现,内容比较易看好懂。
- 后两个链接分别是C++官方文档的英文版和中文版,信息很全,更新到了最新的C++标准,但是相比第⼀个不那么易看;几个文档各有优势,我们结合着使用。
C++的重要性
编程语⾔排⾏榜:
TIOBE排⾏榜是根据互联⽹上有经验的程序员、课程和第三⽅⼚商的数量,并使⽤搜索引擎(如Google、Bing、Yahoo!)以及Wikipedia、Amazon、YouTube和Baidu(百度)统计出排名数据,只是反映某个编程语⾔的热门程度,并不能说明⼀⻔编程语⾔好不好,或者⼀⻔语⾔所编写的代码数量多少。
2024年6⽉TIOBE发布的编程语⾔排⾏榜
C++在工作领域中的应用
C++的应⽤领域服务器端、游戏(引擎)、机器学习引擎、⾳视频处理、嵌⼊式软件、电信设备、⾦融应⽤、基础库、操作系统、编译器、基础架构、基础⼯具、硬件交互等很多⽅⾯都有。
大型系统软件开发。 如编译器、数据库、操作系统、浏览器等等;
⾳视频处理。 常⻅的⾳视频开源库和方案有FFmpeg、WebRTC、Mediasoup、ijkplayer,⾳视频开发最主要的技术栈就是C++。
PC客户端开发。 一般是开发Windows上的桌⾯软件,比如WPS之类的,技术栈的话⼀般是C++和QT,QT 是一个跨平台的 C++图形用户界面(Graphical User Interface,GUI)程序。
服务端开发。 各种大型应用网络连接的⾼并发后台服务。这块Java也比较多,C++主要用于⼀些对性能要求比较高的地方。如:游戏服务、流媒体服务、量化高频交易服务等
游戏引擎开发。 很多游戏引擎就都是使⽤C++开发的,游戏开发要掌握C++基础和数据结构,学习图形学知识,掌握游戏引擎和框架,了解引擎实现,引擎源代码可以学习UE4、Cocos2d-x等开源引擎实现
嵌⼊式开发。 嵌入式把具有计算能力的主控板嵌⼊到机器装置或者电子装置的内部,通过软件能够控制这些装置。比如:智能手环、摄像头、扫地机器⼈、智能音响、门禁系统、车载系统等等,粗略⼀点,嵌⼊式开发主要分为嵌⼊式应用和嵌⼊式驱动开发。
机器学习引擎。 机器学习底层的很多算法都是用C++实现的,上层⽤python封装起来。如果你只想准备数据训练模型,那么学会Python基本上就够了,如果你想做机器学习系统的开发,那么需要学会C++。
测试开发/测试。 每个公司研发团队,有研发就有测试,测试主要分为测试开发和功能测试,测试开发⼀般是使用一些测试工具(selenium、Jmeter等),设计测试用例,然后写一些脚本进行自动化测试,性能测试等,有些还需要自行开发一些测试用具。功能测试主要是根据产品的功能,设计测试用例,然后手动的方式进行测试。
C++学习难度
首先第一个问题,C++难学吗?首先在这里告诉大家C++是⼀个相对难学难精的语言,相比其他⼀些语言,学习难度要高一些要陡峭⼀些,这里有历史包袱的问题,也有语言本身设计和发展历史的问题。网上以前一直流传下面这个21天内自学精通C++的梗。
不过,大家也不要气馁,笔者在这里给大家推荐一些学习书籍,后续也会陆续出一系列C++学习干货,期待与大家共同成长!
C++学习书籍推荐
C++ Primer:主要讲解语法,经典的语法书籍。
STL源码剖析:主要从底层实现的⻆度结合STL源码,庖丁解牛式剖析STL的实现,是侯捷老师的经典之作。可以很好的帮助我们学习别⼈用语法是如何实现出⾼效简洁的数据结构和算法代码,如何使用泛型封装等。
Effctive C++:本书也是侯捷⽼师翻译的,本书有的一句评价,把C++程序员分为看过此书的和没看过此书的。本书主要讲了55个如何正确⾼效使用C++的条款,建议学习时期看⼀遍,工作1-2年后再看一遍,相信会有不一样的收获。
最后,本篇文章到此结束,感觉不错的友友们可以一键三连支持一下笔者,有任何问题欢迎在评论区留言哦~