Boost程序库完全开发指南:深入C++”准”标准库(第5版)
上QQ阅读APP看本书,新人免费读10天
设备和账号都新为新人

十周年纪念·前言

我们的十年

每日埋头忙于工作和生活,等到写下这些文字时才蓦然发现,十年的光阴已经悄悄从身边溜走,不由得发出“逝者如斯夫,不舍昼夜”的感慨。

十年前大多数人还在用电话线“小水管”拨号上网,而十年后光纤宽带100M/200M已是常态。十年前IE浏览器还是上网主流,而十年后Chrome成了绝对霸主……

十年前功能手机正处巅峰,iPhone是刚崭露头角的“贵族”,而十年后智能手机已经普惠大众。十年前3G甫出,手机只能打电话发短信,而十年后5G已经“登场亮相”,各类App争奇斗艳,移动互联网渗透到了生活的方方面面……

十年前电影《阿凡达》刚刚上映,掀起了3D/IMAX的热潮,而十年后3D/IMAX已经比比皆是,但《阿凡达2》依旧遥遥无期……

十年前我的大女儿只有一岁半,而十年后二女儿都已经三岁了……

时间过得好快呀。

C++的十年

十年里的变化实在是太多太多,C++和Boost程序库也是这样。

在这十年里,C++推出了具有里程碑意义的C++11,开启了快速迭代的进化历程。从C++14、C++17一路走来,最新的携带诸多重磅新特性的C++20即将正式发布,令人十分期待。

在这十年里,C++也受到了诸多其他语言的挑战,D、Rust、Go、C#、Java等新老对手轮番上场,在C++的各个应用领域都发起了“猛攻”。但C++作为昔日的“龙头老大”,依然坚守住了一些“阵地”,维持着名声不坠。从TIOBE等编程语言排行榜来看,C++虽然已经不复当年的“王者荣耀”,但还是稳稳地占据着前五名之内的位置,这对一个有着三十多年历史的“老”语言来说算得上是相当难得了。

可以预见,在下一个十年里,C++依然会在底层、系统编程等领域具有优势,它的生命周期还很长,学习、使用C++还是有价值的。

Boost的十年

Boost作为C++的“‘准’标准库”,从十年前本书第1版时的1.42版本,发展到如今的1.72版本,中间经历了30个版本,基本保持着三四个月更新一次的频率。

作为一个“程序库”,它的改变没有语言标准那么“激进”,总体上保持着稳定的态势,仅移除了很少的几个旧组件(coroutine、minmal test、signal、tr1),同时其内部不断重构、优化、提升性能,还增加了数十个新组件。

通过这种严谨务实的做法,Boost一方面继续兼容不同的C++标准,另一方面又持续地扩充着C++的能力,为广大程序员提供了一个庞杂而可靠的“编程武器库”。无论你使用什么操作系统、编译器、语言标准,总能在Boost里找到称心如意的好东西。

十年的时间再次充分证明,“‘准’标准库”的名头绝非浪得虚名,而是实至名归。

不过随着C++标准和vc、gcc、clang等编译器的发展,越来越多的Boost组件都开始要求启用C++11了,这也算是件好事,毕竟C++98太“古老”了,适当地推动一下语言标准升级,对于你我来说,今后敲键盘的工作也能轻松一点。

本书的十年

本书第1版主要的开发环境是Windows和VC。到了第2版开发环境变成了Windows与Linux并重。随后的第3版和第4版,因为我的工作逐渐转移到了Linux,所以就放弃了Windows,全面采用了Linux和gcc。这些变化也反映了C++应用场景的变迁:由客户端转向服务器端开发。

关于本书的内容,因为编写本书第1版时C++11还未发布,只能使用C++98,所以第1版中重点介绍了Boost库里模拟C++11各种新特性、能够简化代码的组件,如typeof、foreach、result_of。编写本书第2版的时候C++11刚发布不久,编译器的支持还比较弱,只适当加入了少量C++11的内容。而在编写本书第3版和第4版的时候,各大编译器对C++11的支持已经很完善了,就完全采用了C++11,删去了旧版里许多过时的内容。

随着时代的前进,C++变得越来越“大”,Boost也变得越来越“大”,想在一本书(即使它很厚)里囊括所有内容已经成为一个“不可能的任务”。所以这次的修订我放弃了全面翻新的想法,而是尽量让这本书保持稳定,不引入过于复杂、高深的组件,只介绍Boost里最基本、最有用、最常用的知识想更深入了解C++/Boost程序库可以参考附录A的推荐书目[3]。

希望本书能够成为Boost世界的“新手村”,无论是谁,都可以在这里磨炼、休息,在积累足够的经验后,再迈向外面的广阔天地。

十年感言

“十年之前,我不认识你,你不属于我。十年之后,我们是朋友,还可以问候。”

无论是新读者还是老朋友,我都衷心地感谢您对这本书的支持,祝愿我们都能在下一个十年里取得更大的进步,赢得更多的成功!

2020年2月20日于 北京 798园区