语言升级
约 1465 字大约 5 分钟
2025-06-21
1.何为 C++
C 语言是关于结构化和模块化的语言,比较适合处理较小规模的程序。而对于复杂的问题,规模较大的程序,需要高度的抽象和建模时,C 语言则变得很不适用且麻烦。
在 20 世纪 80 年代,计算机界提出了 OOP 思想(面向对象思想)支持面向对象的程序设计语言(例如 C++、Java 等)应运而生。
1982 年,Bjarne Stroustrup 博士在 C 语言的基础上引入并扩充了面向对象的概念,发明了一种新的程序语言。为了表达该语言与 C 语言的渊源关系,命名为 C++。
因此 C++ 是基于 C 语言而产生的,它既可以进行 C 语言的过程化程序设计,又可以进行以抽象数据类型为特点的基于对象的程序设计,还可以进行面向对象的程序设计,并且还支持泛型编程,并且增加了许多有用的库(C++ 是 C 的超集,包含 C 的内容,兼容 C 的运行)。
补充:有关
Bjarne Stroustrup,您可以去他的 Bjarne Stroustrup 的个人博客 那里逛一下。
学习 C++ 语言,最直接的好处是:可以明白 C 语言设计不合理的地方,明白面向对象编程是怎么一回事,交织 C 和 C++ 可以窥探对现代编程语言的变化。
2.C++发展简史
C with classes:1979年贝尔实验室Bjarne Stroustrup等人试图分析unix内核的时候,将内核模块化,于是在C语言的基础上进行扩展,增加了类的机制,完成了一个可以运行的预处理程序,称之为C with classes(具备功能:类及派生类、公有和私有成员、类的构造和析构、友元、内联函数、赋值运算符、重载等)。C++1.0:添加虚函数概念、函数和运算符重载、引用、常量等。C++2.0:新增保护成员、多重继承、对象的初始化、抽象类、静态成员、const 成员函数等。C++3.0:引入模板、解决多重继承产生的二义性问题、解决相应构造和析构的处理。C++98:C++标准的第一个版本,绝大多数编译器都支持,得到了国际标准化组织(ISO)和美国标准化协会认可,以模板方式重写C++标准库,引入了STL(标准模板库)C++03:C++标准第二个版本,语言特性无大改变,主要:修订错误、减少多异性C++05:C++标准委员会发布了一份计数报告(Technical Report,TR1),正式更名C++0x,即:计划在本世纪第一个10年的某个时间发布。C++11:增加了许多特性,使得C++更像一种新语言,比如:正则表达式、基于范围for循环、auto关键字、新容器、列表初始化、标准线程库等。C++14:对C++11的扩展,主要是修复C++11中漏洞以及改进,比如:泛型的lambda表达式,auto的返回值类型推导,二进制字面常量等。C++17:在C++11上做了一些小幅改进,增加了19个新特性,比如:static_assert()的文本信息可选,Fold表达式用于可变的模板,if和switch语句中的初始化器等。C++20:自C++11以来最大的发行版,引入了许多新的特性,比如:模块(Modules)、协程(Coroutines)、范围(Ranges)、概念(Constraints)等重大特性,还有对已有特性的更新:比如Lambda支持模板、范围for支持初始化等。
3.C++常见邻域
操作系统或者大型系统软件开发(JVM、Office)
服务器端开发
游戏开发(虚幻 4)
嵌入式和物联网(扫地机器人)
数字图像处理(
Photoshop)人工智能(深度学习算法)
分布式应用
4.C++相关资料
- 可以查看微软的
C++文档进行学习^微软 C++ 学习文档 - 还有谷歌的
C++开源项目规范文档,也值得一看^谷歌 C++ 规范文档
5.C++学习层次
以下引用自 2010 年 8 月号《程序员》刊登的拙文《C++ 强大背后》最后一段
第一个层次:
C++基础语法C++的类、引用、动态内存管理、重载等;第二个层次:正确高效的使用
C++:开始自修,阅读过《
(More)Effective C++》、《(More)Exceptional C++》、《Effective STL》及《C++编程规范》等,踏入专业C++开发之路;第三个层次,深入解读 C++:
关于全局问题可读《深入探索 C++对象模型》、《
Imperfect C++》、《C++沉思录》、《STL源码剖析》,要挑战智商,可看关于模版及模版元编程的书籍如《C++ Templates》、《C++设计新思维》、《C++模版元编程》第四个层次,研究 C++:
阅读《
C++语言的设计和演化》、《编程的本质》(含STL设计背后的数学根基)、C++标准文件《ISO/IEC 14882:2003》、C++标准委员会的提案书和报告书、关于C++的学术文献。C++只是软件开发的一环而已,单凭语言并不能应付业务和工程上的问题。不要强求几年内“彻底学会C++的知识”,到达第二层左右便从工作实战中汲取经验,有兴趣才慢慢继续学习更高层次的知识。
补充:另外,您可以去陈皓先生的酷壳中,查看这篇《C++的坑真的多吗?》,看看他本人的看法。