C++11标准后的C++阅读书目
英文原文:C++ Reading List
C++ 新标准 C++11 的发布导致了大批新书的出现,还有一些经典书籍也进行了更新。Andrew Binstock 在 Dr.dobbs 上给大家推介一些学习 C++ 必需的核心书籍。
1. 《C++程序设计语言》英文第四版,作者: Bjarne Stroustrup
这本书已经被正式列为 C++ 编程的权威书籍。它堪称语言界的权威,独具特色,书面清晰,由设计 C++ 的 Stroustup 所著。 也许有些读者认为 ANSI C++ 文档才是最佳选择,但是这本书作为一个十分简洁的参考书籍,更适合已经对该
语言有所了解的读者们。该书为新特性提供了友好的解释,外加一些对于需要做的以及避免做的事情的建议,使得它成为了想要理解具体的特性的读者们的最佳选择。从这个意义上来说,这本书远远不止是一本参考教程。
一些外在方面可能对这本书有所贬低,尤其是它没有使用等宽字体来打印代码。 不管对于一些读者来说,这看起来有多美观,它还是抛弃了普通的代码读者,他们希望垂直对齐,但这不可能出现。尽管这样,代码的排版还是比以前的版本好太多 了。另一担忧会跟 C++ 本身有关,而不再是这本书。这个版本有 1328 页,比原始版本大约多了 1000 页。 Stroustrup 对于库给了很少的介绍,这些数字足以说明 C++ 已经变得有多复杂。 尽管有这些问题,但是我很清楚,对于 C++ 程序员来说,不管使用这门语言的新特性有多困难,他们都得坚持,唯有这样,才能前进。 极力推荐此书!
(第四版的中文版还没有出,目前《C++程序设计语言(特别版·十周年中文纪念版)》)
C++ Programming Language 4th Edition
2. 《C++ Primer 第 5 版(英文版)》由 Stanley Lippman,Josee Laoie 和 Barbara Moo 合著
多年来,C++ Primer 已经成为了 C++ 的明确教程。 该版本主要针对C++11 标准进行了更新,完全重写了。 900 页密集的页面里,对该语言的每一个角落都进行了详细的探索。 这种说法也许有点保守。这本书的基调和内容都远远超过书名”入门”这个词所指的意思。在语言上,没有一节能是”快速讲解”,相反,从质量到文本都做了很耐 心的描述以确保能涵盖该语言的每一个方面,预见到 C++ 程序员可能遇到的任何问题。想知道将析构函数声明为C++11 标准的 deleted 函数,会带来什么样的严重后果吗我也不知道。但是这本书里会有详细的解答,并引用了其他章节作为额外的辅助信息。
同样,这本书也仅仅包括了语言方面,还有一些对库的讨论和附录,附录总结了库里包含的各种各样的头文件和算法(关于 C++ 库的详细介绍,我推荐这两本书《The C++ Standard Library: A Tutorial and Reference》, 后面会提到。坦白讲,你想知道的关于 C++ 的任何东西,在这两本书里都有透彻的讲解。 刚才提到的 Stroustrup 的那本书《C++ Programming Language, 4th Ed》, 似乎是这本书的竞争对手。 Stroustrup 的书主要是一本注重讲解的参考书,也可以偶尔查询用。但是这本书要实用得多。它有讨论到,如果你没有正确使用新特性,会出现什么问题,还包含了大量的代 码,总之,相对于前一本书,这本书提供了更多的指导。
对于这本书,我唯一的担心就是它很明确是为已经了解基本语言的读者编写的。对于在校学生,甚至是一些有经验的程序员但是初次接触C++,我不推 荐这本书。它的内容太详细以致于不能通过快速阅读达到高效地掌握该语言的效果。 但是对于现有的 C++ 开发人员,尤其是那些想要使用C++11 新特性的开发者,这本书就是很好的选择。
3. 《C++标准库:自学教程与参考手册(第 2 版)(英文版)》Nicolai Josuttis 著
这是 C++ 标准库的经典教程和参考的第二版,根据新标准C++11 进行了更新。不像其他许多书,包含了库和 API,这不是对一大堆函数调用的美化解释。相反,它把标准库(主要是 STL)分解成了一些小节,解释了组件设计用到的基本方法。这时候,作者才进入到 API 的细节部分,结尾处总结了所有其它可能要用到的方法,还有一些简短的解释。容器部分才是精华,对设计,内部结构和应用的解释,以及各种选择之间的比较。
这些论述很有说服力,条理清晰,信息量超大。例如,STL 函数对象和匿名函数的章节,花了 12 页篇幅只是为了解释什么是函数对象以及为什么要使用它们。这些论述之后,作者又花费了 12 页来解释预定义函数对象。在这个时候,他就已经为最后的讨论《匿名函数之旅》 奠定了基础。所以全书总共 1000 多页。这些解释很多都使用了简短,又突出重点的程序来说明,所以你能够很确切地理解一个函数是如何使用或应用的。
这本书的第一版被许多的 C++ 程序员视为真正的经典。我觉得第二版没有道理不受欢迎。对此不熟悉的读者,不管是把它看作是第一本书的升级版还是另一本新书,我都强力推荐。这篇简短的介绍也算是对这本是的一个很好的补充。
The C++ Standard Library 2nd Edition
4. 《C++ Concurrency in Action C++ 并发实战》 Anthony Wiliams 著
这本书主要是讲在使用C++11 特性时对并发的深入探讨。 它是由作为语言新线程支持基础的 Boost Thread 库的主要开发及维护人员编写的。总之,作者很有权威性。
该书从最基础的东西开始,假设读者已经有良好(甚至是非常好)的语言基础,但是首次接触并行代码。 该书逐步地探讨了一些由并发带来的问题,讲述了互斥的解决方案和局限性,以及它们是如何在C++11 中实现的。接下来讲述了 C++ 的内存模型和原子类型。最后,深入探讨了基于锁和无锁数据结构的设计。这是自从 Herb Sutter 在书中讨论这个话题之后,我所见过的最好的处理方法。
这本书很全面地涵盖了一些真正重要的话题,这些话题在其他书籍中是经常被忽略的,比如像,多线程的代码设计,线程应用程序的调试。当然,在我看 来,这两者都描述得太少了。 书中大部分内容都是作为参考资料(就单独的 C++ 线程库就有差不多 130 页)。 另一个附录是一个完整的消息框架,并给出了代码和注解。 毫无疑问,作者还是花费了很大的心思,相关的内容都讲到了。
对于这本书,我也有不满意之处,但是它们都微不足道。 第一个就是你必须深入了解C++,否则阅读起来比较困难。另一个就是作者最后一章讲述的线程池,用红色字体显示的”高级线程”。在我看来,线程池在并发处 设定标记很有意思,但是很可惜,作者却在这儿停笔了。由此可得知,虽然作者在目录有提及到角色模型,但并没有进行讲解,就好像它压根儿不存在一样,可能在 William 看来,它其实对好几种语言至关重要,却不包括C++。
总的来说,这些不满意之处只能反应我的偏好,不能说明这本书有缺陷。William 的这本书非常棒,至少在未来的很长一段时间里都能称得上是这个领域的典型著作。
如果你想更仔细地看下这本书的内容,我们最近在一篇很受欢迎的文章里”Waiting for One-Off Events with Futures。”有摘选了一些片段。
C++ Concurrency in Action
5. 《C和 C++ 安全编码(英文版第 2 版) 》 (中文版的还是第一版)Robert Seacord 著
这本书主要写关于C和 C++ 的安全编码。新版的内容几乎是 2005 年原版的两倍,展示了我们究竟学习了多少关于攻击代码的知识。实际上,在读这本书的时候, 你可能被当下各种五花八门的东西弄得晕头转向。然而,正如作者所说的,安全其实不仅仅是实现反攻技术,而是在实现的过程中保持一种安全防范的思维定式。他 认为,只有保持这种心态,才有办法减少那些未知的攻击所带来的损害。
这本书详细讲解了各种类型的黑客以及怎么阻止黑客或者让他们感到气馁。书中的解释一目了然,代码也很清晰。但是它在要求上比其他编程书也更高一 些:要求读者必须对C和C++d的执行有很好的了解,并且清楚在机器层发生了什么。因为这些必需的知识,书中没有提到,所以如果事先不去了解的话,你可能 不会真正理解书中的精华部分。
对于那些真正理解了程序执行的内部工作原理的开发人员来说,这本书就是不仅仅是一个很好的入门,更是一种启示。例如,如果你不是一个安全方面的 专家,Seacord 在书中关于攻击是如何通过加倍释放已分配的内存块被激活的论述, 凸显了简单的编码错误的这一特征,可能就会被完全忽略了。 书中的解释很有启发性。
该书的实践本质就是让你频繁地使用一些推荐的工具去验证代码,并锁定黑客喜欢探索的访问机制。这本书真的很棒,绝对让你受益匪浅,当然,也会使你成为一名更优秀的程序员。
Secure Coding in C and C++ 2nd Edition
6. 《Real-Time C++》Chris Kormanyos 著
这本书简单地介绍了在实时项目中如何使用C++11。作者介绍了几个基本的项目,展示如何使用C++11 来完成编码。他以艾特梅尔公司的 AVR 单片机为例,使用 GCC 工具链编译,从产品设计,到硬件和编码的实现,以及如何刷机和运行程序都给出了解释,在各种不同的环境下启动发光二极管。接下来又引入了更复杂的项目,像 使用 C++ 编写底层硬件驱动程序。在最后一章,继续探讨了标准 C++ 库和 STL 为嵌入式所用。
这本书很实用,书中的代码也很清晰。它表明了对于进行嵌入式工作的来讲,C++11 是一个合理的选择。总之,对于想要进行嵌入式编程的 C++ 开发人员来说,这本书是很好的教程。但是它所选的一些案例项目,可能对于那些活跃在该领域的开发者来说,没有什么吸引力。
Real-Time C++
翻译: 伯乐在线 - JingerJoe 译文链接: http://blog.jobbole.com/47357/