C++ 的起源可以追溯到 1979 年,当时 Bjarne Stroustrup(本贾尼·斯特劳斯特卢普) 在贝尔实验室从事计算机科学和软件工程的研究工作。面对项目中复杂的软件开发任务,特别是模拟和操作系统的开发工作,他感受到了现有语言(如 C 语言)在表达能力、可维护性和可扩展性方面的不足。1983 年,Bjarne Stroustrup 在 C 语言的基础上添加了面向对象编程的特性,设计出了 C++ 语言的雏形,此时的 C++ 已经有了类、封装、继承等核心概念,为后来的面向对象编程奠定了基础。这一年该语言被正式命名为 C++。
2. 标准化(1989-1994)
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++ 的最初定义范围。
说明:第一个链接不是 C++ 官方文档,标准也只更新到 C++11,但是以头文件形式呈现,内容比较易看好懂。后两个链接分别是 C++ 官方文档的英文版,信息很全,更新到了最新的 C++ 标准,但是相比第一个不那么易看;这两个文档各有优势,我们结合着使用。
C++ 的学习建议
1. 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 等),设计测试用例,然后写一些脚本进行自动化测试,性能测试等,有些还需要自行开发一些测试用具。功能测试主要是根据产品的功能,设计测试用例,然后手动的方式进行测试。
2. 学习书籍推荐
C++ Primer:主要讲解语法,经典的语法书籍,前后中期都可以看,前期如果自学看可能会有点晦涩难懂,能看懂多少看懂多少,中后期作为语法字典,非常好用。
#include<iostream>//C++ 中不需要带.h#include<algorithm>intmain(){
int a[5] = { 4,1,2,5 };
// 指定命名空间访问
std::sort(a, a + 4);
return0;
}
2)using 将命名空间中某个成员展开
#include<iostream>#include<algorithm>//命名空间中成员部分展开using std::cout;
using std::cin;
intmain(){
int a, b;
cin >> a >> b;//输入
cout << a << " " << b << '\n';//输出return0;
}
#include<iostream>#include<algorithm>//命名空间中成员全部展开usingnamespace std;
intmain(){
int a, b;
cin >> a >> b;//输入
cout << a << " " << b << '\n';//输出return0;
}