boost程序库boost完全开发指南南 第4版 什么时候

京 东 价:
[定价:¥]
支  持:
搭配赠品:
服务支持:
加载中,请稍候...
加载中,请稍候...
加载中,请稍候...
Boost程序库完全开发指南:深入C++“准”标准库(第3版)
加载中,请稍候...
商品介绍加载中...
扫一扫,精彩好书免费看
  ★这本书主要是针对Boost的应用,对初学者很有帮助,而且书中所述的对Boost使用比较客观,不是说这本书讲了Boost库所以会让用户觉得Boost的任何类都是不错的,本书对C+十中类应用的说明还是理性的。  ——沈晨辉读         ★Boost/C++必备的好书,很全强,很实用,包含了Boost的各个方面,很细致。  ——以铭亦心    ★不错,方便学习,内容经典。  ——卡卡西    ★学习Boost入门的必备书籍,写得很详细,介绍得很全面,很基本。  ——fanjiangwei7    ★市面上少有谈及Boost库的书籍,开发Boost的大牛,玩元编程的玩疯了,而且各种操作符重载,实在牛,而且库里面的东西比较实用,的确不错!  —Orange_ou    ★适合想学Boost的初学者。每篇都是讲独立的模块,所以可以选择性地看自己需要的部分,不一定非要从头开始看,这样可以略过一些过时或自己不用的模块。  ——无昵称用户    ★简直就是Boost百科全书,虽然很厚,通读一遍也还是很有帮助的。  ——shinl    ★好书就是好书,不必过多解释,中国作者写的为数不多的好书之一。  ——无昵称用户    ★c++模板技术是特色,掌握了模板才能说是掌握了C++的灵魂,在此基础上开发的各种库给C++带来了强大的生产力,Boost是这里面的翘楚,值得作为样板来学习,达到既实用又能学到新知识的目的。其实学习库需要从总体上把握,理清脉络才能更好地理解库的使用技巧和应用场景,再辅以丰富的实践经验,才能真正发挥库的威力,产生强大的实际生产力!  ——京迷票友
京东商城向您保证所售商品均为正品行货,京东自营商品开具机打发票或电子发票。
凭质保证书及京东商城发票,可享受全国联保服务(奢侈品、钟表除外;奢侈品、钟表由京东联系保修,享受法定三包售后服务),与您亲临商场选购的商品享受相同的质量保证。京东商城还为您提供具有竞争力的商品价格和,请您放心购买!
注:因厂家会在没有任何提前通知的情况下更改产品包装、产地或者一些附件,本司不能确保客户收到的货物与商城图片、产地、附件说明完全一致。只能确保为原厂正货!并且保证与当时市场上同样主流新品一致。若本商城没有及时更新,请大家谅解!
权利声明:京东上的所有商品信息、客户评价、商品咨询、网友讨论等内容,是京东重要的经营资源,未经许可,禁止非法转载使用。
注:本站商品信息均来自于合作方,其真实性、准确性和合法性由信息拥有者(合作方)负责。本站不提供任何保证,并不承担任何法律责任。
印刷版次不同,印刷时间和版次以实物为准。
价格说明:
京东价:京东价为商品的销售价,是您最终决定是否购买商品的依据。
划线价:商品展示的划横线价格为参考价,该价格可能是品牌专柜标价、商品吊牌价或由品牌供应商提供的正品零售价(如厂商指导价、建议零售价等)或该商品在京东平台上曾经展示过的销售价;由于地区、时间的差异性和市场行情波动,品牌专柜标价、商品吊牌价等可能会与您购物时展示的不一致,该价格仅供您参考。
折扣:如无特殊说明,折扣指销售商在原价、或划线价(如品牌专柜标价、商品吊牌价、厂商指导价、厂商建议零售价)等某一价格基础上计算出的优惠比例或优惠金额;如有疑问,您可在购买前联系销售商进行咨询。
异常问题:商品促销信息以商品详情页“促销”栏中的信息为准;商品的具体售价以订单结算页价格为准;如您发现活动商品售价或促销信息有异常,建议购买前先联系销售商咨询。
加载中,请稍候...
加载中,请稍候...
加载中,请稍候...
加载中,请稍候...
加载中,请稍候...
加载中,请稍候...
加载中,请稍候...
浏览了该商品的用户还浏览了
加载中,请稍候...
联系供应商
七日畅销榜
新书热卖榜
iframe(src='///ns.html?id=GTM-T947SH', height='0', width='0', style='display: visibility:')孔夫子旧书网该图书已经找不到了, 还有其他店铺销售此图书。Copyright(C)
孔夫子旧书网
京ICP证041501号
海淀分局备案编号Boost程序库完全开发指南 pdf
资料价格:免费
文件类型: (rar)[]
文件大小:18.4 MB
上传时间:
标&&&&&&&签: & & & & & & & & &
论文写作技巧
Boost程序库完全开发指南 pdf
您可能需要的
[] [] [] [] [] []热销排行榜
1.2.3.4.5.6.7.8.9.10.
最近浏览的其他商品
浏览更多同类商品
【 】??????????
Boost是一个功能强大、构造精巧、跨平台、开源并且完全免费的C++程序库,有着“C++‘准’标准库”的美誉。
Boost由C++标准委员会部分成员所设立的Boost社区开发并维护,使用了许多现代C++编程技术,内容涵盖字符串处理、正则表达式、容器与数据结构、并发编程、函数式编程、泛型编程、设计模式实现等许多领域,极大地丰富了C++的功能和表现力,能够使C++软件开发更加简捷、优雅、灵活和高效。
本书基于2012年8月发布的Boost1.51版,介绍了其中的所有117个库,并且结合C++11标准详细、深入
Boost程序库完全开发指南-深入C++准标准库-(第2版)
978-7-121-19089-6
电子工业出版社
出版日期:
读者对象:
¥71.30&&&
立刻节省:¥27.70
所属分类:
VB.NET程序设计实训教..
Visual Basic 2015入..
Visual Studio 2015高..
Java语言规范-基于Jav..
  ★国人原创精品  ★C++开发的好帮手  ★C++专家的优秀学习教材  ★深入解析Boost库的内部实现  ★内容丰富、组织得当、概念清晰、讲解细致,是广大C++程序员和爱好者的必备好书。
Boost是一个功能强大、构造精巧、跨平台、开源并且完全免费的C++程序库,有着“C++‘准’标准库”的美誉。
Boost由C++标准委员会部分成员所设立的Boost社区开发并维护,使用了许多现代C++编程技术,内容涵盖字符串处理、正则表达式、容器与数据结构、并发编程、函数式编程、泛型编程、设计模式实现等许多领域,极大地丰富了C++的功能和表现力,能够使C++软件开发更加简捷、优雅、灵活和高效。
本书基于2012年8月发布的Boost1.51版,介绍了其中的所有117个库,并且结合C++11标准详细深入地讲解了其中数十个库,同时实现了若干颇具实用价值的工具类和函数,可帮助读者迅速地理解掌握Boost的用法及其在实际开发工作中的应用。
本书内容丰富、结构严谨、详略得当、讲解透彻,带领读者领略了C++的最新前沿技术,相信会是每位C++程序员的必备工具书。
最近一年我电话面试了数十位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源码并不轻松惬意,需要下一番功夫。另一方面,如果沉迷于这些有趣的底层细节而忘了原本要解决什么问题,恐怕就舍本逐末了。
Boost中的很多库是按泛型编程的范式来设计的,对于熟悉面向对象编程的人而言,或许面临一个思路的转变。比如,你得熟悉泛型编程的那套术语,如concept、model、refinement,才容易读懂Boost.Threads文档中关于各种锁的描述。我想,对于熟悉STL设计理念的人而言,这不是什么大问题。
在某些领域,Boost不是唯一的选择,也不一定是最好的选择。比如,要生成公式化的源代码,我会首选用脚本语言写一小段代码生成程序,而不用Boost.Preprocessor;要在C++程序中嵌入领域特定语言,我会首选用Lua或其他语言解释器,而不用Boost.Proto;要用C++程序解析上下文无关文法,我会首选用ANTLR来定义词法与语法规则并生成解析器(parser),而不用Boost.Spirit。总之,使用Boost时心态要平和,别较劲去改造C++语言。把它有助于提高生产力的那部分功能充分发挥出来,让项目从中受益才是关键。
要学习Boost,除了阅读其官方网站的文档、示例与源码之外,最好能有一本比较全面的中文书在手边随时翻阅。对于不谙英文的开发者,这更是可幸之至。您手上这本《Boost 程序库完全开发指南》是很好的使用指南与参考手册。作者由浅入深地介绍了Boost的大部分常用内容,能让读者迅速了解Boost,并从中找到自己需要的部分。拿到这本书稿之后,我有粗有细地阅读了一遍,总体来看,作者水平很高,也相当务实,对C++和Boost的理解与运用很到位,我从这本书学到了不少新知识。为此,我乐于向希望学习Boost程序库的开发者推荐这本靠谱的书。
须知“功不唐捐”,作为一名现代C++程序员,在Boost上投入的精力定能获得回报。
《代码大全》译者之一
屈指算来,接触C++语言至今已经有十余个年头了。回首往事,不禁感慨良多。
1996年我上大学最开始学的是Pascal,不得不说,Pascal严谨的程序风格确实很适合作为一门教学语言,然而用于实际开发就不那么合适了(直到出现Delphi)。由于当时学校并未开设C语言课程,因此在Pascal课程结束后我就买书自学C/C++语言,并在次年报名计算机软件专业技术资格和水平考试,靠着一点点编程和考试的“天分”获得了高级程序员资质(当年很热衷考级考证,后来就“淡定”多了)。虽然有了资格证,但我仍然算是个C++的初学者,对于C++的认识还处于C的面向过程和简单的基于对象层次上。
新千年伊始我考入了北京理工大学就读研究生,因为跟导师做项目开始接触STL与C++标准库,大概是2005年从1.33版结识了Boost,这才真正领略了C++的精髓。那段时期Java和C#正在国内大行其道,C++则势单力薄,有关STL和C++标准的技术书籍寥寥无几,而讲解Boost的书更是为零,故对Boost的学习基本只能靠自己的摸索与实践。好在Boost自带的文档相当丰富(尽管看全英文的资料十分辛苦),而且源码也写得比较清晰规范,在熟悉了STL的基础上学习Boost倒也并不算太难。
但Boost的一个最大的特点就是“庞大”,功能组件众多,要想把它全部装进脑子里融会贯通基本上是不可能的,使用时需要经常查阅英文文档,相当麻烦。因此,在学习的过程中,我逐渐产生了编写学习笔记的想法。一开始只是一个简单的纯文本文件,记录了一些使用经验的片断,随着积累不断增加,纯文本形式已经不能够满足知识整理的需求了,于是我又把这些文字迁移到了Word文档里,把使用经验分类编目,进行较系统的归纳梳理。慢慢地,这份学习笔记居然有了上万字的规模,成为了一份很好的Boost备忘参考,在日常的开发工作中给了我很大的帮助――就像《设计模式》一书中所说的那样,捕获了很多使用Boost解决问题的实践经验,避免了重复发现。不过,这份资料一直仅限于我个人使用,属于“自娱自乐”的作品,从未示人。
时间一晃到了2010年1月份的某天夜里,不知道是什么原因我忽然失眠了,躺在床上翻来覆去怎么也睡不着。突然,一个念头闯入了脑海:把Boost开发经验整理出版吧,让更多人能够分享这些知识,正所谓“独乐乐,与众乐乐,孰乐?”这个大胆的想法的出现让我那天的失眠又延长了几个小时――关于书的各种构想在头脑中“肆虐横行”。
随后的几天里我就把这个想法付诸行动了,虽然以前也写过并发表很多文章,也在网上印刷了几本个人文集,但出版正式的书还是第一次。在把学习笔记进一步整理完善,编写出较完整的结构和一个样章后,我就开始联系出版社了。当初并没有多大的信心,毕竟我这个作者名不见经传,也没有什么资历、背景和名气(而且还是个“网盲”,从未跟随潮流开个人博客)。很幸运,发出的第一个E-mail就是电子工业出版社,而且编辑也在第一时间回复了我,这才给了我以持续写作完成全书的动力。
写作过程中我也进一步加深了对Boost的认识,澄清了许多原来未曾注意到的细节。原本只打算写20万字左右、三百多页,但写到中途才发现Boost库的博大精深远非当初的理解,也意识到了自己当初学习的肤浅。历经了近半年近乎不眠不休的努力,最终呈现给读者的是这本厚达500多页的图书,文字量是最初学习笔记的数十倍,内容也翔实丰满了很多――达成这个结果,我个人可以说是问心无愧了。
C++与Boost
C++较Java和C#等语言的一个最大不同在于它并非是由某个公司或个人把持的,它的真正发展动力来自于广大程序员。Boost就是这样的一个典范,它成功地填补了从C++98到C++0X这“失落的十年”间的空白,在竞争对手Java和C#不断更新版本新增特性的时候以库的形式极大地增强了C++的能力,使C++不至于因为标准规范的滞后而落后于时代,而且Boost还深层次地挖掘了C++的潜力,开创了泛型编程、模板元编程、函数式编程等崭新的境界。
就个人来说,我比较喜欢的Boost版本有两个,分别是1.35和1.39。1.35版增加了asio、bimap、circular_buffer等许多重要组件,而1.39版则增加了signals2库,这两个版本都在我的工作用机上停留了相当长的时间。落笔之时,Boost已经更新到了1.43版,成长为一个相当完善、全面、强大的C++程序库。可以毫不夸张地说,现在的C++程序员,如果不熟悉Boost,那么至少丧失了一半使用C++的好处,同时会多耗费数倍的开发精力和时间。
随着C++0X标准的即将来临,Boost程序库的发展也出现了加速的趋势,由原来间隔数月不定期更新版本,改为定期(每3个月左右)发布新版本,而且每个新版本都会包含大量极有价值的更新内容。因此,希望读者在阅读本书时及时访问Boost的官网(http:://www.boost.org),以便获取最新的版本。
感谢读者选择本书,再说一句真心的“套话”(笑):限于作者水平有限,书中错漏在所难免,敬请读者原谅、指正。
首先我要感谢整个C++群体,特别是:C++语言的发明者Bjarne Stroustrup博士――他给我们带来了美妙的C++;然后是Alexander Stepanov和C++标准委员会――他们把STL引入了C++,开创了C++的现代编程风格;以及Beman G. Dawes、Boost程序库的所有作者和Boost社区――他们为我们奉献了如此高水准的程序库。
其次我要感谢电子工业出版社博文视点公司,他们给了我这个把自己的开发经验出版成书的机会,在把潦草的个人学习笔记变成正式图书的过程中他们付出了艰辛的努力。还要感谢陈硕先生,他审阅了本书的部分手稿,提出了很多有价值的参考意见,并慨然为本书撰写序言。
接下来我要感谢我的家人:感谢我的父母和弟弟,他们永远是我生命中最重要的人;感谢我的妻子,她自始至终都支持我的写作,并担负了大部分照顾孩子的家务(虽然偶有怨言);还要对已满一岁半的女儿说声抱歉,为了写作本书,我已经牺牲了很多陪她玩耍的时间。
我还要感谢黄美华、冯薇、戚天龙、罗玉震、颜静、陈刚、张秋香、缪泽波等同事,长期的共事令我们建立了深厚的友谊。对后两位同事致以特别的感谢,他们对完成本书提供了大力的支持和帮助。
最后,感谢多年以来的好友岳大海、时吉斌、王峰,感谢我的中学老师邓英、杜爱芹、练鑫云、陈静,感谢我的研究生导师贾云得,以及所有在我成长过程中曾经给予我关心和帮助的朋友们!
日 于 北京 王府井
罗剑锋(网名ch rono) 1996年就读于东北财经大学 1997年开始接触C/C++ 1998年参加计算机软件专业技术资格和水平考试,获高级程序员资质 2003年毕业于北京理工大学,获计算机专业硕士学位 目前任项目经理,主要研究方向为C/C++、设计模式、密码学、数据库、嵌入式系统开发 业余爱好是阅读、欣赏音乐和旅游
关于本书 1
读者对象 1
本书的术语与风格 2
本书的结构 3
如何阅读本书 5
Boost程序库总论 7
关于Boost 7
什么是Boost 7
安装Boost 8
使用Boost 8
关于STLport 9
什么是STLport 9
安装STLport 10
编译STLport 10
使用STLport 10
开发环境简介 11
开发环境搭建 12
UNIX开发环境 12
Windows开发环境 13
高级议题 14
时间与日期 17
timer库概述 17
使用建议 20
progress_timer 20
扩展计时精度 22
progress_display 24
注意事项 26
date_time库概述 27
编译date_time库 28
date_time库的基本概念 29
处理日期 29
创建日期对象 30
访问日期 32
日期的输出 33
与tm结构的转换 34
日期长度 34
日期运算 35
日期区间 37
日期区间运算 38
日期迭代器 40
其他功能 41
综合运用 41
处理时间 44
时间长度 44
操作时间长度 45
时间长度的精确度 47
创建时间点对象 49
操作时间点对象 50
与tm、time_t等结构
时间区间 51
时间迭代器 52
综合运用 52
date_time库的高级议题 56
编译配置宏 56
格式化时间 56
本地时间 57
内存管理 61
smart_ptr库概述 61
RAII机制 61
智能指针 62
scoped_ptr 63
操作函数 64
与auto_ptr的区别 66
与unique_ptr的区别 67
scoped_array 69
与unique_ptr的区别 70
使用建议 71
shared_ptr 72
操作函数 73
工厂函数 76
应用于标准容器 77
应用于桥接模式 79
应用于工厂模式 80
定制删除器 81
高级议题 83
shared_array 84
weak_ptr 85
获得this的shared_ptr 87
打破循环引用 88
intrusive_ptr 89
pool库概述 89
操作函数 91
object_pool 92
操作函数 93
使用更多的构造参数 94
singleton_pool 95
pool_alloc 97
实用工具 101
noncopyable 101
typeof 104
向typeof库注册自定义类 107
使用建议 108
optional 108
4.3.1 “无意义”的值 108
类摘要 109
操作函数 109
工厂函数 111
高级议题 112
assign 113
使用操作符+=向容器
增加元素 113
使用操作符()向容器
增加元素 114
初始化容器元素 115
减少重复输入 117
搭配非标准容器工作 118
高级用法 120
交换数组 122
特化std::swap 122
特化ADL可找到的swap 123
使用建议 124
singleton 124
boost.pool的单件实现 125
boost.serialzation的
单件实现 127
tribool 129
类摘要 129
为第三态更名 131
输入/输出 132
与optional<bool>的区别 132
operators 133
基本运算概念 134
算术操作符的用法 135
基类链 137
复合运算概念 138
相等与等价 140
解引用操作符 141
下标操作符 142
高级议题 143
exception 144
标准库中的异常 145
类摘要 146
向异常传递信息 147
更进一步的用法 148
包装标准异常 150
使用函数抛出异常 151
获得更多的调试信息 152
高级议题 153
类摘要 155
生成器 158
增强的uuid类 160
与字符串的转换 161
SHA1摘要算法 162
config 163
BOOST_STRINGIZE 163
BOOST_STATIC_
CONSTANT 164
其他工具 165
utility 165
BOOST_BINARY 165
BOOST_CURRENT_
FUNCTION 166
字符串与文本处理 171
lexical_cast 171
异常bad_lexical_cast 173
对转换对象的要求 174
应用于自己的类 174
format 175
简单的例子 176
输入操作符% 177
类摘要 179
格式化语法 180
format的性能 181
高级用法 181
string_algo 182
简单的例子 183
string_algo概述 184
大小写转换 185
判断式(算法) 185
判断式(函数对象) 187
替换与删除 191
查找(分割)迭代器 196
tokenizer 197
类摘要 197
分词函数对象 199
char_separator 199
escaped_list_separator 201
offset_separator 201
tokenizer库的缺陷 202
xpressive 204
两种使用方式 204
正则表达式语法简介 205
类摘要 206
客服专线:010- 客服邮箱:
Copyright & 北发图书网 2007,
All Rights Reserved
北京北发电子商务股份有限公司 版权所有Boost程序库完全开发指南 推荐序
】 浏览:78次
最近一年我电话面试了数十位 () 应聘者,惯用的暖场问题是"工作中使用过 STL 的哪些组件?使用过 Boost 的哪些组件?"。得到的答案大多集中在 vector、map 和& shared_ptr。如果对方是在校学生,我一般会问问 vector 或 map 的内部实现、各种操作的复杂度以及迭代器失效的可能场景。如果是有经验的程序员,我还会追问 shared_ptr 的线程安全性、循环引用的后果及如何避免、weak_ptr 的作用等。如果这些都回答得不错,进一步还可以问问如何实现线程安全的引用计数,如何定制删除动作等等。这些问题让我能迅速辨别对方的 () 水平。
我之所以在面试时问到 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 源码并不轻松惬意,需要下一番功夫。另一方面,如果沉迷于这些有趣的底层细节而忘了原本要解决什么问题,恐怕就舍本逐末了。
Boost 中的很多库是按泛型()的范式来设计的,对于熟悉面向对象编程()的人而言,或许面临一个思路的转变。比如,你得熟悉泛型编程()的那套术语,如concept、model、refinement,才容易读懂 Boost.Threads 的文档中关于各种锁的描述。我想,对于熟悉 STL 设计理念的人而言,这不是什么大问题。
在某些领域,Boost 不是唯一的选择,也不一定是最好的选择。比如,要生成公式化的源代码,我会首选用脚本语言写一小段代码生成程序,而不用 Boost.Preprocessor;要在 C++() 程序中嵌入领域特定语言,我会首选用 Lua 或其他语言解释器,而不用 Boost.Proto;要用 C++() 程序解析上下文无关文法,我会首选用 ANTLR 来定义词法与语法规则并生成解析器(parser),而不用 Boost.Spirit。总之,使用 Boost 时心态要平和,别较劲去改造 C++() 语言。把它有助于提高生产力的那部分功能充分发挥出来,让项目从中受益才是关键。
要学习 Boost,除了阅读其官方网站的文档、示例与源码之外,最好能有一本比较全面的中文书在手边随时翻阅。对于不谙英文的开发者,这更是可幸之至。您手上这本《Boost 程序库完全开发指南》是很好的使用指南与参考手册。作者由浅入深地介绍了 Boost 的大部分常用内容,能让读者迅速了解 Boost,并从中找到自己需要的部分。拿到这本书稿之后,我有粗有细地阅读了一遍,总体来看,作者水平很高,也相当务实,对 C++() 和 Boost 的理解与运用很到位,我从这本书学到了不少新知识。为此,我乐于向希望学习 Boost 程序库的开发者推荐这本靠谱的书。
须知"功不唐捐",作为一名现代 C++() 程序员,在 Boost 上投入的精力定能获得回报。
《代码大全》译者之一
2010年8月于中国o香港
【】【】【】
【】【】【】}

我要回帖

更多关于 python 3程序开发指南 的文章

更多推荐

版权声明:文章内容来源于网络,版权归原作者所有,如有侵权请点击这里与我们联系,我们将及时删除。

点击添加站长微信