C++标准库扩展权威指南(赠品)
基本信息
- 原书名: The C++ Standard Library Extensions: A Tutorial and Reference
- 原出版社: Addison-Wesley Professional
- 作者: (美)Pete Becker [作译者介绍]
- 译者: 史晓明
- 丛书名: C++设计新思维
- 出版社:机械工业出版社
- ISBN:9787111236757
- 上架时间:2010-7-14
- 出版日期:2008 年4月
- 开本:16开
- 页码:411
- 版次:1-1
- 所属分类:
赠品
编辑推荐
“TR1的大小差不多是C++标准库的2倍。它加入了很多新的功能,甚至是全新类型的库部件。譬如说,在某些TR1类中,有些内嵌类型的存在与否可能会依赖于其模板参数。对于那些仅对C++标准库有经验的程序员来说,这是奇。隆而陌生的。本书非常完整(它覆盖了所有的TR1功能),它不仅比TR1本身更容易理解,而且在技术上也是正确的。”
——Matthew Austern, Google软件工程师
“TR1可以帮助C++程序员变得比过去更为多产。Pete Becker编写的这本书是对这些组件的终极参考手册:它们是什么、它们是怎么工作的以及它们可以用在哪里。对于那些想要使用这些标准化组件来提高他们的生产率和代码质量的人来说,应该把这本书放在其书架上。”
——John Maddock,顾问/程序员
当前的C++标准库使用常用的类和函数对C++语言核心进行扩展。在最近几年里,为了解决C++标准库的局限,作者开发了一系列组件来对C++语言进行更进一步的扩展。这些扩展编入一个全面的技术报告中(TR1),并且其中的大部分已经被C++标准的下一个版本通过了。
本书中,Pete Becker不仅对TR1库中的每一个组件都进行了详细的描写,还解释了基本工具、模板、调用包装器、类型特性、数值、正则表达式以及C语言兼容方面的新功能。通过自己在实现这些组件中所积累的经验,Pete Becker不仅阐明了它们的价值并在需要时对标准加以澄清,还提供了通过测试的完整代码。
本书大部分章节都包含了不同难度的练习来帮助程序员得到这些新组件的实践经验。这些练习的答案以及所有的代码示例都可以在网上找到。附录中不仅为TR1库所包含或扩展的头文件提供了摘要,还介绍了应该怎样在多线程应用程序中安全地使用这些组件。
该书可供各大专院校作为教材使用,也可供从事相关工作的人员作为参考用书使用。
内容简介回到顶部↑
作译者回到顶部↑
本书提供作译者介绍
.. << 查看详细
目录回到顶部↑
前言
第一部分 基本工具
第1章 元组
1.1 头文件的摘要
1.2 tuple类模板
1.3 像tuple一样对std::pair进行存取
1.4 练习
第2章 智能指针
2.1 定义
2.2 关于示例
2.3 头文件的摘要
2.4 shared_ptr类模板
2.5 类模板weak_ptr
2.6 类模板enable_shared_from_this
2.7 bad_weak_ptr类
2.8 转换
2.9 受控资源的析构
2.10 异常
2.11 多线程
译者序回到顶部↑
TR1库是C++通向完善之路上迈出的又一步,它为C++标准库加入了很多新功能。虽然其各个部件早已在各种类库(尤其是boost)中初见雏形,但是被纳入标准的重要意义是不言而喻的。本书是对TR1库的完整介绍,不仅对枯燥的标准文本给出了浅显易懂的解释,还提供了很多示例和练习来帮助我们理解。相信每个严肃的C++程序员都可以像我一样从本书中获益良多。
在本书的翻译过程中,给我帮助最大的莫过于我的好朋友李敏。在近1年的时间里,她逐字逐句地阅读了每一个章节并且提出了很多宝贵的意见,每当在技术和表达上遇到困难时,她也总是我默认的讨论对象。没有她,本书的翻译也就不可能及时完成。在此,我想对她说声谢谢。..
我还想感谢本书的原作者Pete Becker和机械工业出版社的陈冀康编辑,是他们让我能有机会接触并翻译这样一本好书。
在翻译本书的过程中,我还得到了很多人的无私帮助,他们是陈恩惠、陈冀康、董平、康飞、陆海根、陆如江、陆如娟、陆如琴、陆如珍、史友良、史宗霖、邵玉玲、王雅梦、谢之易、徐金方、徐云峰、Christopherc Zimmerman和Nick Londey。感谢他们在本书翻译过程中给予我的各种帮助。
最后,我想感谢我父母多年的养育,也感谢他们为我所做的一切!...
史晓明
2008年2月22日
前言回到顶部↑
TR1库对C++标准库进行的扩展主要表现为在下列领域中所加入的新功能:
·基本工具(utility):使用引用计数的智能指针;类模板tuple,它是std::pair类模板的一般化实现,可以对不同个数的参数进行处理。
·容器:使用散列表实现的set和map;固定大小的数组实现array。
·调用包装器(call wrapper):一系列更为强大和灵活的模板。可以使用这些模板对函数、成员函数以及其他函数对象进行包装,从而使我们能够更方便地把它们作为参数传递给算法。
·类型特性(type trait):一系列可以提取类型属性或是在编译时修改类型的模板,它们有助于对模板元编程进行简化。
·数值(numeric):各种各样的随机数生成器;高等数学特殊函数;数值功能(与C语言在1999年所加入的相类似)。
·正则表达式(regular expression):一系列类和函数,可以用它们来描述和查找文本中的模式。
·C语言兼容:一系列类型、函数和宏(与C语言在1995年和1999年所加入的相类似)。
TR1库的正式工作始于2001年。当时,C++标准委员会(C++ Standards Committee)通过其库工作组(Library Working Group)征求提案。最后纳入库中的大多数提案都是由Boost组织的成员提出的。一部分标准委员会的成员一直在试图寻找一种不受标准化过程约束的方式来为C++开发新库,他们在1998年建立了Boost组织。在正规过程外部进行工作会更为灵活,因而Boost库的各个部分能够以更为迅速而独立的进度进行开发,而这在标准委员会内部是不可能的。Boost是一个稳步发展的组织,其所提供的库中还有很多有用的功能尚未包含在TR1库中。
标准委员会每年举行两次会议。在2001年~2005年间,库工作组不仅把他们在这些会议上的绝大多数时间都花在和TR1库相关的工作上,还在不召开会议时使用E-mail进行了大量的联系。在这段时间里,库工作组对收到的提案在以下方面进行了改进:尽可能地加以简化;对提案进行重写使得它们不仅更为明晰,还能符合ISO标准所需要的正规形式;统一库中各个部分的表达方式。
到了2002年末,我所工作的公司Dinkumware, Ltd.开始实现TR1库。Dinkumware销售C、C++和Java的标准库,因此实现TR1库对于我们来说是很自然的举动。我们的工作也对技术报告的改进有所帮助,因为我们发现一些部分的描述不够清晰或是过于详细,有时甚至被遗漏了。Dinkumware已经完整地实现了TR1库,在本书的所有例子里,我都会使用这一实现。
关于本书
本书分为七个部分,每个部分都会对某个特定领域中的新功能进行详细的讨论。它们都会先对所包含的功能进行简要的介绍。这通常会包含一些关于其历史的简短讨论,有时还会为TR1库为什么没有包含某些明显的功能给出理由。
每个部分都会有一个头文件摘要,正是这些头文件定义了这个部分中所讨论的功能。头文件摘要通常并不是可编译的代码,它只是为这个头文件所定义的组件提供了一个概览,列出了这个头文件中定义的所有模板、类、非成员函数、对象、常量等。随后我们会对它们进行更为详细的定义。然而,即使是后者通常也不是可编译的代码。很多细节都是实现相关的,在这些细节上花费太多精力并不会为我们带来任何收获。
所有摘要都使用灰色表示。我们在大部分摘要后面附上了C++标准的正式要求。这些正式要求将使用缩进方式表示。我们不会在那些非正式的讨论上使用缩进。譬如:
class C
{
};
这段文本给出了类C的正式要求。通常这不仅难以理解而且非常技术化。虽然其措辞非常明确,但是往往很难读懂。非正式的文本没有缩进。它提供了一个更容易理解的描述,虽然有时不是很精确。
媒体评论回到顶部↑
——Matthew Austern,Google软件工程师
“TR1可以帮助C++程序员变得比过去更为多产。Pete Becker编写的这本书是对这些组件的终极参考手册:它们是什么、它们是怎么工作的以及它们可以用在哪里。对于那些想要使用这些标准化组件来提高他们的生产率和代码质量的人来说,应该把这本书放在其书架上。”...
——John Maddock,顾问/程序员
书摘回到顶部↑
自动对象(auto object)仅当定义它的函数执行时才会存在,而全局对象在程序运行时一直存在着。几乎每一个具有一定规模(nontrivial)的应用程序都会对某些生命周期介于自动对象和全局对象之间的资源进行控制。具有这类生命周期的资源中最常见的就是内存了,有经验的程序员会很清楚没有对动态分配的内存进行正确的处理会导致怎样的问题。TR1库为此提供了一对模板,它们有助于确保资源在需要时始终存在,并且在不再需要时会被正确释放。这两个模板是shared_ptr(将在第2.4节中讨论)和weak_ptr(将在第2.5节中讨论)
……








点击看大图





加载中...

