【C++】入门基础知识
目录
✨说在前面
🍋知识点一:C++的发展历史
• 🌰1.C++发展历史
• 🌰2.C++的迭代与更新
• 🌰3.编程语言排行
• 🌰4.C++在工作领域的应用
• 🌰5.C++参考文档
🍋知识点二:命名空间
• 🌰1.namespace的价值
• 🌰2.namespace的定义
• 🌰3.命名空间的使用
🍋知识点三:输入、输出
🍋知识点四:缺省参数
• 🌰1.什么是缺省参数?
• 🌰2.函数重载
🍋知识点五:引用
• 🌰1.什么是引用?
• 🌰2.引用的特性
• 🌰3.引用的使用
• 🌰4.const引用
• 🌰5.指针和引用的关系
🍋知识点六:内联函数和空指针
• 🌰1.inline与内联函数
• 🌰2.空指针nullptr
• ✨SumUp结语
🍋知识点一:C++的发展历史
• 🌰1.C++发展历史
- 起源与早期发展
起源:C++起源于20世纪80年代,由丹麦计算机科学家本贾尼·斯特劳斯特鲁普(Bjarne Stroustrup)在AT&T贝尔实验室发起。当时,斯特劳斯特鲁普为了解决C语言的不足,开始设计一种新的编程语言,这就是C++的雏形。他最初称之为“C with Classes”,意为带有类的C语言。
正式命名:1983年,这种语言被正式命名为C++,以表示这是C语言的一种进化和扩展。
- 标准化进程
标准化开始:C++的标准化工作于1989年开始,并成立了一个ANSI和ISO(国际标准化组织)的联合标准化委员会。
标准发布:
1994年1月25日,联合标准化委员会提出了第一个标准化草案,并在保持斯特劳斯特鲁普最初定义的所有特征的同时,增加了部分新特征。
1998年,第一个C++标准(C++98)发布,其中包含了许多重要的特性,如类、继承、模板和异常处理等。
随后,C++的标准化工作继续推进,相继发布了C++03、C++11、C++14、C++17和C++20等多个版本。每个版本都引入了新的特性和改进,使得C++成为一门功能丰富的编程语言。
- 重要里程碑
编译器问世:1985年,第一个可用的C++编译器问世,这标志着C++从理论走向了实践。
经典著作:斯特劳斯特鲁普在C++的发展过程中撰写了多部经典著作,如《The C++ Programming Language》,这些著作对C++的推广和普及起到了重要作用。
商业应用:随着C++的不断发展,越来越多的商业软件开始使用C++编写,如Windows操作系统、浏览器IE等。
- 未来展望
C++的未来发展方向包括进一步提高语言的性能、简化语法、增加并行和异步编程的支持,并继续引入更多现代编程范式的特性。随着技术的不断进步和需求的不断变化,C++将继续保持其强大的生命力和广泛的应用前景。
- 关键人物
本贾尼·斯特劳斯特鲁普:作为C++的设计者和实现者,斯特劳斯特鲁普对C++的发展做出了巨大贡献。他的工作不仅推动了C++的标准化进程,还促进了C++在各个领域的应用。
总结:C++的发展历史是一个不断进化和扩展的过程。从最初的“C with Classes”到如今的C++20,C++已经发展成为一门功能强大、应用广泛的编程语言。
• 🌰2.C++的迭代与更新
时间 阶段 内容
1998年 C++98 C++官方的第一个版本,接大多数编译器都支持,得到了国际标准化组织(ISO)和协会认可,以模版方式重写C++的标准库,引入了STL(标准模版库)。
2003年 C++03 这是C++标准的一个重大修订,主要聚焦了语言的稳定性和兼容性。C++03修正了C++98中的错误和漏洞,同时引入了一些新的特性和功能,如tr1库。
2011年 C++11 这是一次革命性的更新,增加了大量的新特性和功能,使得C++更像一种新语言,增加了lanmbda、范围for、右值引用和移动语义、边长模板参数、STL容器和核心能指针、标准线程库等。
2014年 C++14 对C++11的扩展,主要是修复C++11中的漏洞以及改进,比如:泛型的lambda的返回值类型推导,二进制字面常量等。
2017年 C++17 C++17进一步增强了C++的功能和表达能力。这次更新引入了if constexpr等,同时改进了标准库中的多个组件,如string等。
2020年 C++20 C++20是C++历史上的有一个重要里程碑。这次更新引入了一系列新特性和改进(Coroutines)、概念(Concepts)、模块化(Modules)等。
2023年 C++23 C++23是一个小版本更新,进一步完善和改进现有特性,增加了if consteval、falt_map、import std导入标准库等。
2026年 C++26 制定中…
• 🌰3.编程语言排行
• 🌰4.C++在工作领域的应用
C++的应用领域服务器端、游戏(引擎)、机器学习引擎、音视频处理、嵌入式软件、电信设备、金融应用、基础库、操作系统、编译器、基础架构、基础工具、硬件交互等很多方面都有。
1.大型系统软件开发
如编译器、数据库、操作系统、浏览器等等
2.音视频处理
常见的音视频开源库和方案有FFmpeg、WebRTC、Mediasoup、ijkplayer,音视频开发最主要的技术栈就是C++。
3.PC客户端开发
一般是开发Windows上的桌面软件,比如WPS之类的,技术栈的话一般用C++和QT,QT是一个跨平台的C++图形用户界面(Graphical User Interface,GUI)程序。
- 服务端开发
各种大型应用网络连接的高并发后台服务。这块Java也比较多,C++主要用于一些对新能要求比较高的地方。如:游戏服务、流媒体服务、量化高频交易服务等。
- 游戏引擎开发
很多游戏引擎就都是使用C++开发的,游戏开发要掌握C++基础和数据结构,学习图形学知识,掌握游戏引擎和框架,了解引擎实现,引擎源代码可以学习UE4、Cocos2d-x等开源引擎实现。
- 嵌入式开发
嵌入式把具有计算能力的主控板嵌入到机器装置或者电子装置的内部,通过软件能够控制这些装置。比如:智能手环、摄像头、扫地机器人、智能音响、门禁系统、车载系统等等,粗略一点,嵌入式开发主要分为嵌入式应用和嵌入式驱动开发。
- 机器学习引擎
机器学习底层的很多算法都是用C++实现的,上层用python封装起来。如果你只想准备数据训练模型,那么学会python基本上就够用了,如果你想做机器学习系统的开发,那么需要学会C++。
- 测试开发/测试
每个公司研发团队,有研发就有测试,测试主要分为测试开发和功能测试,测试开发一般是使用一些测试工具(selenium、Jmeter等),设计测试用例,然后写一些脚本进行自动化测试,性能测试等,有些还需要自行开发一些测试用具。功能测试主要是根据产品的功能,设计测试用例,然后手动的方式进行测试。
• 🌰5.C++参考文档
https://legacy.cplusplus.com/reference/
https://zh.cppreference.com/w/cpp
https://en.cppreference.com/w/
说明:第一个链接不是C++的官方文档,标准也只更新到C++11,但是以头文件的形式呈现,内容比较易看、好懂。后面两个链接分别是C++官方文档的中文版和英文版,信息和全,更新到了最新的C++标准,但是相比第一个不那么易看;几个文档各有优势,可以结合使用。
🍋知识点二:命名空间
• 🌰1.namespace的价值
在C/C++中,变量、函数和后面要学习的类都是大量存在的,这些变量、函数和类的别称都存在于全局作用域中, 可能会导致很多冲突。使用命名空间的目的就是对标识符的名称进行本地化,以避免命名冲突或名字污染,namespace关键字的出现就是针对这种问题的。
C语言项目类似下面这样的命名冲突是普遍存在的问题,C++引入namespace就是为了更好地解决这样的问题。