C++11标准后的C++阅读书目

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++

原文链接: drdobbs   翻译: 伯乐在线JingerJoe
译文链接: http://blog.jobbole.com/47357/

<转>C++11标准后的C++阅读书目的更多相关文章

  1. C++11标准后的C++阅读书目

    C++11标准后的C++阅读书目 投递人 itwriter 发布于 2013-09-25 19:44 评论(2) 有285人阅读  原文链接  [收藏]  « » 英文原文:C++ Reading L ...

  2. C++ Primer中文版(第5版)(顶级畅销书重磅升级全面采用最新 C++ 11标准)

    C++ Primer中文版(第5版)(顶级畅销书重磅升级全面采用最新 C++ 11标准) [美]Stanley B. Lippman( 斯坦利李普曼)  Josee Lajoie(约瑟拉乔伊 )  B ...

  3. CPP全面总结(涵盖C++11标准)

    OOP之类和对象 1. this指针的引入 每个成员函数都有一个额外的隐含的形参,这个参数就是this指针,它指向调用对象的地址.默认情况下,this的类型是指向类类型非常量版本的常量指针.可以表示成 ...

  4. VS2010编译器工具cl对c++11标准支持情况測试

    本文探讨了VS2010编译工具cl对C++11标准的支持情况.提供了利用C++11新特性的两段代码来进行測试,并同g++ 4.9.3编译器的编译情况相对照.总的说来:VS2010的编译器工具cl部分支 ...

  5. 转:linux下安装或升级GCC4.8,以支持C++11标准

    转:http://www.cnblogs.com/lizhenghn/p/3550996.html C++11标准在2011年8月份获得一致通过,这是自1998年后C++语言第一次大修订,对C++语言 ...

  6. linux下安装或升级GCC4.8,以支持C++11标准

    C++11标准在2011年8月份获得一致通过,这是自1998年后C++语言第一次大修订,对C++语言进行了改进和扩充.随后各编译器厂商都各自实现或部分实现了C++中的特性. 如需查看各编译器对C++1 ...

  7. Google C++ Style Guide在C++11普及后的变化

    转 http://www.cnblogs.com/chen3feng/p/5972967.html?from=timeline&isappinstalled=0&lwfrom=user ...

  8. C++11标准中常用到的各种算法汇总.

    在C++11标准中定义了很多算法,这些算法可以让我们很方便的操作各种容器和数组,这里要注意一下,这些算法操作的并非容器,而是迭代器,然后通过迭代器来操作容器中的数据,算法本身并不会关注容器中保存的数据 ...

  9. 合成的默认构造函数定义为delete的一种情况(针对C++11标准)

    1. 默认初始化 如果定义变量时没有指定初值,则变量会被默认初始化,此时变量被赋予了"默认值". 对于类类型的变量来说,初始化都是依靠构造函数来完成的.因此,即使定义某个类的变量( ...

随机推荐

  1. Nodejs中Async模块的流程控制方法

    首先,使用Asycn模块需要安装,它不是node自带的.其次,该模块有大约20多个流程控制方法,我们在这里仅分析常用的series, parallel, waterfall, auto这四种,并且尽量 ...

  2. JS正则2

    正则表达式可以:•测试字符串的某个模式.例如,可以对一个输入字符串进行测试,看在该字符串是否存在一个电话号码模式或一个信用卡号码模式.这称为数据有效性验证•替换文本.可以在文档中使用一个正则表达式来标 ...

  3. 有关STL 标准模板库

    1.vector  本质:对数组的封装  特点:读取能在常数时间内完成

  4. linux下编译bib、tex生成pdf文件

    实验: 在linux环境下,编译(英文)*.bib和*.tex文件,生成pdf文件. 环境: fedora 20(uname -a : Linux localhost.localdomain 3.19 ...

  5. hashMap的数据结构

    HashMap底层实现还是数组,只是数组的每一项都是一条链.

  6. python实践——批量统计mongodb数据库的集合大小

    #!/usr/bin/env python import os,sys list = [] for i in range(3,50): l = os.popen("/bin/echo 'sh ...

  7. ubuntu14.04 安装系统

    p { margin-bottom: 0.1in; line-height: 120% } code.cjk { font-family: "Droid Sans Fallback" ...

  8. 总结--解决 mysql 中文乱码

    首先分析一下导致mysql 中文乱码的原因: 1.建表时使用了latin 编码 2.连接数据库的编码没有指定 3.写入时就已经乱码(这种情况需要自己检查源数据了) 解决方法总结: 1.创建库时指定编码 ...

  9. Android学习---SQLite数据库的增删改查和事务(transaction)调用

    上一篇文章中介绍了手工拼写sql语句进行数据库的CRUD操作,本文将介绍调用sqlite内置的方法实现CRUD操作,其实质也是通过拼写sql语句. 首先,创建一个新的android项目: 其次,查看代 ...

  10. Jackson fasterxml跟codehaus的区别 (fasterxml vs. codehaus) -- 转载

    Jackson fasterxml和codehaus的区别: 他们是Jackson的两大分支.也是两个版本的不同包名.Jackson从2.0开始改用新的包名fasterxml:1.x版本的包名是cod ...