前言
C++可算是一种声名在外的编程语言了。这个名声有好有坏,从好的方面讲,C++性能非常好,哪个编程语言性能好的话,总忍不住要跟C++来单挑一下;从坏的方面讲,它是臭名昭著的复杂、难学、难用。
当然,这样一来,熟练的C++程序员也就自然而然获得了“水平很高”的名声,所以这也不完全是件坏事。不管说C++是好还是坏,不可否认的是,C++仍然是一门非常流行且非常具有活力的语言。继沉寂了十多年,并终于发布语言标准的第二版“C++11”之后,C++以每三年一版的频度发布着新的语言标准,每一版都在基本保留向后兼容性的同时,提供着改进和新功能。
正文
C++程序员应该都听到过下面这种说法:C++是一门多范式的通用编程语言。
多范式,是因为C++支持面向过程编程,也支持面向对象编程,也支持泛型编程,新版本还可以说是支持了函数式编程。同时,上面这些不同的范式,都可以在同一项目中组合使用,这就大大增加了开发的灵活性。因此,C++适用的领域非常广泛,小到嵌入式,大到分布式服务器,到处可以见到C++的身影。
C++有着许多著名的应用场景:
1.大型桌面应用程序(如AdobePhotoshop、GoogleChrome和MicrosoftOffice
2.大型网站后台(如Google的搜索引擎)游戏(如StarCraft)和游戏引擎(如Unreal和Unity)
3.编译器(如LLVM/Clang和GCC)解释器(如Java虚拟机和V8JavaScript引擎)实时控制(如战斗机的飞行控制和火星车的自动驾驶系统)
4.视觉和智能引擎(如OpenCV、TensorFlow)数据库(如MicrosoftSQLServer、MySQL和MongoDB)
有些同学可能会觉得,这些应用场景似乎和平时的开发场景有点远啊!你的感觉是对的。有些传统上使用C++的场合现在已经不一定使用C++,最典型的是个人电脑上的桌面应用。以前Windows下开发桌面应用常常用MFC,微软的C++框架,而现在我估计听说过MFC的程序员都不多吧。目前很流行的VisualStudioCode主要是用TypeScript写的,不是C++。而我自己也用C#写过桌面应用,不过界面逻辑之外的计算和处理仍然是用一个C++的DLL来完成。典型情况是,需要性能的组件用C++来写,整个应用程序融合多种不同的语言。
C++的传统领域有被侵蚀的风险,那是因为和它相竞争的语言远远不止一个,可以说是上下夹攻。
如果专注性能和最小内存占用的话,C仍然是首选——嵌入式领域用C非常多,而Linux也是用纯C写的。如果专注抽象表达和可读性的话,那Python之类的脚本语言则要方便得多。图形界面(GUI)编程传统上是C++的地盘,但近年来C#和JavaScript占领了很大一部分市场。游戏算是C++的经典强项了,但有了C++写的游戏引擎,游戏用C#写也没啥问题了——你可能不一定知道,Unity游戏引擎上的首选开发语言是C#,而王者荣耀是用什么游戏引擎呢?答案正是Unity——所以王者荣耀可以认为是用C#开发的。还有,Go和Rust也加入了战团,对C++形成了一定的竞争。
不过,真是这样吗?我们需要回到C++的核心竞争力上来看一下。
计算机在发明的初期,价格奇高,而性能拿今天的标准来看却是极低的,自然不能不