Boost程序库完全开发指南_深入C++“准”标准库 - (EPUB全文下载)
文件大小:0.9 mb。
文件格式:epub 格式。
书籍内容:
内容简介
Boost是一个功能强大、构造精巧、跨平台、开源并且完全免费的C++程序库,有着“C++‘准’标准库”的美誉。
Boost由C++标准委员会部分成员所设立的Boost社区开发并维护,使用了许多现代C++编程技术,内容涵盖字符串处理、正则表达式、容器与数据结构、并发编程、函数式编程、泛型编程、设计模式实现等许多领域,极大地丰富了C++的功能和表现力,能够使C++软件开发更加简捷、优雅、灵活和高效。
本书基于2012年8月发布的Boost1.51版,介绍了其中的所有117个库,并且结合C++11标准详细、深入地讲解了其中数十个库,同时实现了若干颇具实用价值的工具类和函数,可帮助读者迅速地理解、掌握Boost的用法及其在实际开发工作中的应用。
本书内容丰富、结构严谨、详略得当、讲解透彻,带领读者领略了C++的最新前沿技术,相信会是每位C++程序员的必备工具书。
未经许可,不得以任何方式复制或抄袭本书之部分或全部内容。
版权所有,侵权必究。
图书在版编目(CIP)数据
Boost程序库完全开发指南:深入C++“准”标准库/罗剑锋著. —2版. —北京:电子工业出版社,2013.1
ISBN 978-7-121-19089-6
Ⅰ. ①B… Ⅱ. ①罗… Ⅲ. ①C语言—程序设计—指南 Ⅳ. ①TP312-62
中国版本图书馆CIP数据核字(2012)第285458号
责任编辑:孙学瑛
印 刷:北京中新伟业印刷有限公司
装 订:三河市皇庄路通装订厂
出版发行:电子工业出版社
北京市海淀区万寿路173信箱 邮编100036
开 本:787×980 1/16 印张:38.75 字数:801千字
印 次:2013年1月第1次印刷
印 数:3000册 定价:99.00元
凡所购买电子工业出版社图书有缺损问题,请向购买书店调换。若书店售缺,请与本社发行部联系,联系及邮购电话:(010)88254888。
质量投诉请发邮件至zlts@phei.com.cn,盗版侵权举报请发邮件至dbqq@phei.com.cn。
服务热线:(010)88258888。
推荐序
最近一年我电话面试了数十位C++应聘者,惯用的暖场问题是“工作中使用过STL的哪些组件?用过Boost的哪些组件?”得到的答案大多集中在vector、map和shared_ptr。如果对方是在校学生,我一般会问问vector或map的内部实现、各种操作的复杂度,以及迭代器失效的可能场景。如果是有经验的程序员,我还会追问shared_ptr的线程安全性、循环引用的后果及如何避免、weak_ptr的作用等。如果这些都回答得不错,进一步还可以问问如何实现线程安全的引用计数,如何定制删除动作等。这些问题让我能迅速地判别对方的C++水平。
我之所以在面试时问到Boost,是因为其中的许多组件确实可以用于编写可维护的产品代码。Boost包含近百个程序库,其中不乏具有工程实用价值的佳品。每个人口味与技术背景不一样,对Boost的取舍也不一样。就我的个人经验而言,首先可以使用绝对无害的库,例如noncopyable、scoped_ptr、static_assert等,这些库的学习和使用都比较简单,容易入手。其次,有些功能自己实现起来并不困难,正好Boost里提供了现成的代码,那就不妨一用,比如date_time和circular_buffer等。然后,在新项目中,对于消息传递和资源管理可以考虑采用更加现代的方式,例如用function/bind在某些情况下代替虚函数作为库的回调接口、借助shared_ptr实现线程安全的对象回调等。这二者会影响整个程序的设计思路与风格,需要通盘考虑,如果正确使用智能指针,在现代C++程序里一般不需要出现delete语句。最后,对某些性能不佳的库保持警惕,比如lexical_cast。总之,在项目组成员人人都能理解并运用的基础上,适当引入现成的Boost组件,以减少重复劳动,提高生产力。
Boost是一个宝库,其中既有可以直接拿来用的代码,也有值得借鉴的设计思路。试举一例:正则表达式库regex对线程安全的处理。
早期的RegEx类不是线程安全的,它把“正则表达式”和“匹配动作”放到了一个类里边。由于有可变数据,RegEx的对象不能跨线程使用。如今的RegEx明确地区分了不可变(immutable)与可变(mutable)的数据,前者可以安全地跨线程共享,后者则不行。比如正则表达式本身(basic_regex)与一次匹配的结果(match_results)是不可变的;而匹配动作本身(match_regex)涉及状态更新,是可变的,于是用可重入的函数将其封装起来,不让这些数据泄露给别的线程。正是由于做了这样合理的区分,RegEx在正常使用时就不必加锁。
Donald Knuth在“Coders at Work
”一书里表达了这样一个观点:如果程序员的工作就是摆弄参数去调用现成的库,而不知道这些库是如何实现的,那么这份职业就没啥乐趣可言。换句话说,固然我们强调工作中不要重新发明轮子,但是作为一个合格的程序员,应该具备自制轮子的能力。非不能也,是不为也。
C/C++语言的一大特点是其标准库可以用语言自身实现。C标准库的strlen、strcpy、strcmp系列函数是教学与练习的好题材,C++标准库的complex、string、vector则是类、资源管理、模板编程的绝佳示范。在深入了解STL的实现之后,运用STL自然手到擒来,并能自动避免一些错误和低效的用法。
对于Boost也是如此,为了消除使用时的疑虑,为了用得更顺手,有时我们需要适当了解其内部实现,甚至编写简化版用做对比验证。但是由于Boost代码用到了日常应用程序开发中不常见的高级语法和技巧,并且为了跨多个平台和编译器而大量使用了预处理宏,阅读Boost源码并不轻松惬意,需要下一番功夫。另一方面,如果沉迷于这些有趣的底层细节而忘了原本要解决什么问题,恐怕就舍本逐末了。
Boos ............
书籍插图:
以上为书籍内容预览,如需阅读全文内容请下载EPUB源文件,祝您阅读愉快。
书云 Open E-Library » Boost程序库完全开发指南_深入C++“准”标准库 - (EPUB全文下载)