赖勇浩(http://laiyonghao.com)

作为一个时不时要用一点 C++ 的程序员,我常常自嘲为斯德哥尔摩综合症患者,用 Python 写着懒散的代码时,会怀念以前编写 C++ 代码的那种被虐感。但当真正要写一些 C++ 代码的时候,又会怀念 Python 带给我的自在,这也许就是所谓的由奢入俭难了。幸好有 Boost,有时候它甚至让我觉得其实 C++ 也可以写得如同 Python 般雅致。大概是因为 Boost 的组委们一直以来的高要求,好库,好文档,所以长期都是阅读在线文档作为学习的途径。后来也有国人翻译了一本 Boost 的书,书很棒,但对应的 Boost 的版本就比较过时了,而且语言转换过程中也有不可避免的信息流失,令人扼腕。这几年,alai 等人自发组织起来,翻译了 Boost 的全部文档和一些相关书籍,而且对版本的跟进也是比较及时的,是不可多得的好材料。尽管有如此方便的资源,我还是比较期待有一本国人写的,Boost 相关的书,我相信国人对我们使用的 C++ 风格和水平有更好的理解,能够写出更适合我们真实需求的书。所以后来手上才有这本《Boost程序库完全开发指南:深入C++"准"标准库》(以下简称《Boost 指南》)。

虽然我期待一本国人写的 Boost 相关的书,但是当我看到这本书的目录时,我不由地鄙视起来:太多东西了,像流水账,甚至可能是直接抄袭官方文档。

当书到手后,我发现它超越了我的期待,作者的苦心孤诣不说,至少抄袭完全是不存在的。第 0、1 两章把读者引入 Boost 的新新世界,讲述了本书的基本结构和阅读指南,然后是 Boost 的安装与编译,给了初手一条向上的梯子。本书可以说是详略得当,作为一作定位为手册+介绍的书,做到这一点不太容易。编排由浅入深,而又曲径通幽,比如以“时间与日期”作为 hello boost 之例,与当前市面上的 Boost 大有不同(通常是以 shared_ptr 为始),因为“时间与日期”是大家天天接触的概念,接受起来容易不少,让人感觉 Boost 真的有用,解决实际问题,这样读者对 Boost 的兴趣就被勾了起来,再往下读,也不那边怕艰难了。其实按我的设想,我觉得接下来就讲一下字符串和各种容器,比如 tuple、unordered、bimap、circular_buffer 之类的,应该更好一些;可惜这本书还是接下来马上就开始讲内存管理,介绍 shared_ptr 了,不能免俗啊。

这本书的另一个特色就是例子都是作者专心构造的,尽显作者给足了心想做本好书。比如讲 date_time 库的那一章,构造了一个信用卡的免息期的计算例子,例在身边,感受新鲜,我当时读到这个例子觉得作者真可算得上匠心独运了。虽然如此,但仍然要指出一下因为作者可能不太喜欢参考他人的一些例子(太怕被人说抄袭而刻意避嫌?),也有一些我觉得不太好的例子,比如讲 operators 时,那个 class point,居然支持大小比较和加减操作,多少有点算概念没理清。如果实在要用这个例子,我觉得也许叫 class vector3d(三维矢量)更好一些。

最后,讲一下这本书我觉得比较不喜欢的地方。在我看来,既然读者都已经开始学习、使用 Boost 了,想必基础较好、自我学习能力较强,《Boost 指南》仍然定位在介绍和手册这一层次,我觉得多少让人觉得这本书写得啰嗦、写得不够深入。虽然全书都是作者自己的经验和学习成果,例子也是精心构建,但读来仍然不会有胜于官方文档的感觉。关于 Boost 的书,我更期待的也许是如何以 Boost 来解决一些经典的问题,向读者展示 Boost 的强大与实用的《Boost Cookbook》。从全书来看,作者 C++ 经验相当丰富,这本书完全没有展示出作者的实际水平,很期望作者能够加加油,换换思路,带给我们一本《Boost Cookbook》。

最后两章,Boost 和设计模式、结束语,是画龙点睛之笔。前者对 GoF 的 23 个设计模式和后来总结的 3 个设计模式与 Boost 结合起来,点破 Boost 中的哪些库使用了哪个设计模式,可以说是点破了 Boost 库精巧灵活之谜,也让设计模式的学习者、爱好者有一个可观摩的模式的应用与实现的典范。这是在其它书中不曾见的。而在结束语中,作者直言 C++ 和 Boost 仍然有很多不足,但我们也不必拘泥于此,我们要有开阔的眼界,用好工具解决好问题,编程,功夫在诗外。作者最后讲到一句话,因为我也曾说过类似的言论,使我顿生戚戚,所以借来作为我的书评的结束吧:……生活中不只有 C++、代码和编程,还有更多的东西值得我们去体味,朋友、亲人、爱人更值得花时间与他们在一起。走出办公室,离开计算机,去亲近大自然,享受美餐,散散步,打打球……拥有美好的生活才能够创造出完美的程序。

一本超越期待的 C++ 书——简评《Boost程序库完全开发指南:深入C++“准”标准库》相关推荐

  1. 一本超越期待的 C++ 书——简评 Boost程序库完全开发指南 深入C++ 准 标准库

    分享一下我老师大神的人工智能教程!零基础,通俗易懂!http://blog.csdn.net/jiangjunshow 也欢迎大家转载本篇文章.分享知识,造福人民,实现我们中华民族伟大复兴! 赖勇浩( ...

  2. Boost程序库完全开发指南——深入C++“准”标准库(第3版)

    内容简介  · · · · · · Boost 是一个功能强大.构造精巧.跨平台.开源并且完全免费的C++程序库,有着"C++'准'标准库"的美誉. Boost 由C++标准委员会 ...

  3. 一本超越期待的 C++ 书——简评《Boost程序库完全开发指南:深入C++“准”标准库》...

    作为一个时不时要用一点 C++ 的程序员,我常常自嘲为斯德哥尔摩综合症患者,用 Python 写着懒散的代码时,会怀念以前编写 C++ 代码的那种被虐感.但当真正要写一些 C++ 代码的时候,又会怀念 ...

  4. 读《Boost程序库完全开发指南》

    读<Boost程序库完全开发指南> 2011-05-18 20:47:19|  分类: 读书|举报|字号 订阅 C++确实很复杂,神一样的0x不知道能否使C++变得纯粹和干爽? boost ...

  5. 读书笔记之:Boost程序库完全开发指南(Ch1-4)

    第0章 导读 第1章 Boost程序库总论 1.什么是Boost 2. 如何使用Boost 3.什么是STLprot 4.开发环境 第2章 时间与日期 1. timer库 代码如下: View Cod ...

  6. 《BOOST程序库完全开发指南》 第11章 函数与回调

    第11章  函数回调 #include <iostream> #include <boost/assign.hpp> #include <boost/ref.hpp> ...

  7. boost------signals2的使用1(Boost程序库完全开发指南)读书笔记

    signals2基于Boost的另一个库signals,实现了线程安全的观察者模式.在signals2库中,观察者模式被称为信号/插槽(signals and slots),他是一种函数回调机制,一个 ...

  8. 《BOOST程序库完全开发指南》 第04章 实用工具

    类型自动推导: #include <iostream> #include <boost/typeof/typeof.hpp> #include <vector> # ...

  9. boost------asio库的使用2(Boost程序库完全开发指南)读书笔记

    网络通信 asio库支持TCP.UDP.ICMP通信协议,它在名字空间boost::asio::ip里提供了大量的网络通信方面的函数和类,很好地封装了原始的Berkeley Socket Api,展现 ...

最新文章

  1. 北大校长王恩哥送给毕业生的十句话
  2. 【黑金原创教程】【FPGA那些事儿-驱动篇I 】实验二十七:TFT模块 - 显示
  3. JMeter性能测试,验证请求数据的准确性(wc命令)
  4. Tail Recursion尾递归
  5. 先学python还是ros_ROS入门学习
  6. Cocos2d-3.x Android环境搭建
  7. 蓝桥杯 BASIC-22 基础练习 FJ的字符串
  8. Format “jpeg” is not supported (supported formats: eps, pdf, pgf, png, ps, raw, rgba, svg, svgz)
  9. snakeyaml jyaml 哪个好_lol手游哪个英雄可玩性高 英雄联盟手游英雄强度排行
  10. Oracle排序查询语句
  11. Unity中使用摇杆控制
  12. 桌面级显卡天梯图(显卡性能对比图.2018.11)
  13. Java8新特性 方法引用(四)
  14. 亿图图示,获取图标的好软件
  15. html格式桌面,HTML桌面壁纸
  16. Unity3D-实战-01坦克大战-day03箱式对撞机、钢体、2D渲染层级问题、重力问题(出现坠落现象)、旋转问题、左右上下冲突问题、抖动问题
  17. 无货源模式,跨境电商时代的风向标
  18. JavaWeb网上书城 结课设计
  19. js通过AJAX绑定数据四部曲
  20. 腾讯Java开发岗:linux安装java环境

热门文章

  1. 穿搭网在线头像试衣间
  2. idel使用工具快捷键
  3. 网站 图标 背景 素材 网址 js效果网址 导航效果网址 网址大全 素材集
  4. 教程:MySQL 8安装与配置及注意事项
  5. 什么是番茄工作法?如何使用番茄工作法?
  6. linux、FTP中查看隐藏文件夹(.pm2等是隐藏的)
  7. Kafka动态认证SASL/SCRAM验证
  8. linux shell 关机,linux shell关机命令详解
  9. arcgis之合并碎小图斑到相邻大块图斑
  10. HDCP@SKE交互