<转>C++11标准后的C++阅读书目

时间:2022-12-17 13:00:29

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++11标准后的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新特性的开发者,这本书就是很好的选择。

<转>C++11标准后的C++阅读书目

3. 《C++标准库:自学教程与参考手册(第2版)(英文版)》Nicolai Josuttis著

这是C++标准库的经典教程和参考的第二版,根据新标准C++11进行了更新。不像其他许多书,包含了库和API,这不是对一大堆函数调用的美化解释。相反,它把标准库(主要是STL)分解成了一些小节,解释了组件设计用到的基本方法。这时候,作者才进入到API的细节部分,结尾处总结了所有其它可能要用到的方法,还有一些简短的解释。容器部分才是精华,对设计,内部结构和应用的解释,以及各种选择之间的比较。

这些论述很有说服力,条理清晰,信息量超大。例如,STL函数对象和匿名函数的章节,花了12页篇幅只是为了解释什么是函数对象以及为什么要使用它们。这些论述之后,作者又花费了12页来解释预定义函数对象。在这个时候,他就已经为最后的讨论《匿名函数之旅》 奠定了基础。所以全书总共1000多页。这些解释很多都使用了简短,又突出重点的程序来说明,所以你能够很确切地理解一个函数是如何使用或应用的。

这本书的第一版被许多的C++程序员视为真正的经典。我觉得第二版没有道理不受欢迎。对此不熟悉的读者,不管是把它看作是第一本书的升级版还是另一本新书,我都强力推荐。这篇简短的介绍也算是对这本是的一个很好的补充。

<转>C++11标准后的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++11标准后的C++阅读书目

C++ Concurrency in Action

5. 《C和C++安全编码(英文版第2版)》 (中文版的还是第一版)Robert Seacord著

这本书主要写关于C和C++的安全编码。新版的内容几乎是2005年原版的两倍,展示了我们究竟学习了多少关于攻击代码的知识。实际上,在读这本书的时候, 你可能被当下各种五花八门的东西弄得晕头转向。然而,正如作者所说的,安全其实不仅仅是实现反攻技术,而是在实现的过程中保持一种安全防范的思维定式。他认为,只有保持这种心态,才有办法减少那些未知的攻击所带来的损害。

这本书详细讲解了各种类型的黑客以及怎么阻止黑客或者让他们感到气馁。书中的解释一目了然,代码也很清晰。但是它在要求上比其他编程书也更高一些:要求读者必须对C和C++d的执行有很好的了解,并且清楚在机器层发生了什么。因为这些必需的知识,书中没有提到,所以如果事先不去了解的话,你可能不会真正理解书中的精华部分。

对于那些真正理解了程序执行的内部工作原理的开发人员来说,这本书就是不仅仅是一个很好的入门,更是一种启示。例如,如果你不是一个安全方面的专家,Seacord在书中关于攻击是如何通过加倍释放已分配的内存块被激活的论述, 凸显了简单的编码错误的这一特征,可能就会被完全忽略了。 书中的解释很有启发性。

该书的实践本质就是让你频繁地使用一些推荐的工具去验证代码,并锁定黑客喜欢探索的访问机制。这本书真的很棒,绝对让你受益匪浅,当然,也会使你成为一名更优秀的程序员。

<转>C++11标准后的C++阅读书目

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++开发人员来说,这本书是很好的教程。但是它所选的一些案例项目,可能对于那些活跃在该领域的开发者来说,没有什么吸引力。

<转>C++11标准后的C++阅读书目

Real-Time C++

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

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

  1. C&plus;&plus;11标准后的C&plus;&plus;阅读书目

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

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

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

  3. CPP全面总结(涵盖C&plus;&plus;11标准)

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

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

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

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

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

  6. linux下安装或升级GCC4&period;8,以支持C&plus;&plus;11标准

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

  7. Google C&plus;&plus; Style Guide在C&plus;&plus;11普及后的变化

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

  8. C&plus;&plus;11标准中常用到的各种算法汇总&period;

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

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

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

随机推荐

  1. 20145215&amp&semi;20145307《信息安全系统设计基础》实验二 固件设计

    20145215&20145307<信息安全系统设计基础>实验二 固件设计 实验目的与要求 了解多线程程序设计的基本原理,学习 pthread 库函数的使用. 了解在 linux ...

  2. 我们为什么要使用maven&comma;公司推行maven杂谈

    最近在公司内推荐使用maven,推荐一个落后于业内十年的技术,实在没什么好说的,可是没想到遇到了前所未有的阻力,总是听到各种各样的质疑,我就闹不明白了,推行这个东西是为了更规范的管理项目成果,方便大家 ...

  3. vs2010 安装mvc3

    下载链接如下:MVC 3安装包:http://www.microsoft.com/downloads/zh-cn/details.aspx?familyid=d2928bc1-f48c-4e95-a0 ...

  4. MFC 线程创建方式

    MFC 分UI线程和工作线程,一般现在的应用程序都是一个主UI线程和N个工作线程来完成工作.主UI线程获取到工作线程发送的信息来刷新界面. 不过因为工作需要,MFC有要维护的项目,因此就学习一下MFC ...

  5. 鸟哥Linux私房菜 基础学习篇读书笔记(10):Linux磁盘和文件系统管理(3)

    本文总结了Linux操作系统来管理我们的硬盘和文件系统需要使用命令.当我们在系统中增加一个硬盘驱动器.什么是我们需要去通过这个硬盘就可以真正使用步骤?下面步骤: (1)对磁盘进行分区,新建能够使用的分 ...

  6. Java8之Lambda表达式基础

    Java 8中,将会提供对lambda的支持,函数式编程FP(Functional Programming)将会得到很好地支持,而函数式编程的一个重要特点就是适合并行运算. λ:希腊字母表中排序第十一 ...

  7. PHP连接MySQL查询中文时显示Notice&colon; Trying to get property of non-object

    1.保证MySQL和PHP的编码一致 MySQL 修改整个数据库的编码格式     注意:如果数据不重要的话,可以直接使用更改数据库的编码格式,再重新建表即可.(此例中的数据库是test) alter ...

  8. 一道颇有难度的JavaScript题

    上次分享了一道题,大家反响不错,很开心自己写的东西有人愿意花时间去看,也给了自己莫大的鼓舞,其实做题虽然不比真正的编程,但是也能够让你发现一些你之前没有注意到的语言层面的问题.所以,这次再分享一道稍微 ...

  9. PullToRefreshGridView上拉刷新,下拉加载

    PullToRefreshGridView上拉刷新,下拉加载 布局: <?xml version="1.0" encoding="utf-8"?> ...

  10. QtGui&period;QProgressBar

    A progress bar is a widget that is used when we process lengthy tasks. It is animated so that the us ...