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

时间: 2024-10-13 23:02:02

C++11标准后的C++阅读书目的相关文章

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

本文探讨了VS2010编译工具cl对C++11标准的支持情况,提供了利用C++11新特性的两段代码来进行测试,并同g++ 4.9.3编译器的编译情况相对比.总的说来:VS2010的编译器工具cl部分支持了C++11标准,而g++ 4.9.3则全部支持C++11标准.虽然现在已出现了C++14等新的标准,但熟悉了C++11标准的支持情况有利于我们正确选用符合自己需要的编译工具. 1. 问题产生 一个月前由于编写算法的而使用C++语言,看了一些英文版的算法设计和分析书.一个偶然的机会发现了C++11

C++11标准之右值引用(rvalue reference)

1.右值引用引入的背景 临时对象的产生和拷贝所带来的效率折损,一直是C++所为人诟病的问题.但是C++标准允许编译器对于临时对象的产生具有完全的自由度,从而发展出了Copy Elision.RVO(包括NRVO)等编译器优化技术,它们可以防止某些情况下临时对象产生和拷贝.下面简单地介绍一下Copy Elision.RVO,对此不感兴趣的可以直接跳过: (1) Copy Elision Copy Elision技术是为了防止某些不必要的临时对象产生和拷贝,例如: struct A { A(int)

关于阅读书目的选择

从上学时代就不爱读书,工作后才开始逼迫自己读书.因为偶然的工作安排,也是因为自己的爱好,最开始自己只读计算机方面的书,对其他书籍根本不感兴趣,只一心想研究计算机技术,后来才发现只读一种书是不行的,就跟木桶原理一样,你的价值观和文学.金融.历史等方面的素养同样会影响你技术水平的提升.比如在做一件事的时候,当你价值判断出现问题,方向错了,技术水平再高也没用,再比如当你同时面临好多件事情的时候,技术可能也帮不了你. 在知识爆炸的时代,书籍也多的数不清,我们的时间和精力也是有限的,因此如何选择自己的阅读

C++11 标准新特性:Defaulted 和 Deleted 函数

前两天写的铁字中提到了C++的删除函数,今天特地去网上查了查,转载了一篇不错的文章... 转载自 http://www.ibm.com/developerworks/cn/aix/library/1212_lufang_c11new/index.html C++11 标准新特性:Defaulted 和 Deleted 函数 本文将介绍 C++11 标准的两个新特性:defaulted 和 deleted 函数.对于 defaulted 函数,编译器会为其自动生成默认的函数定义体,从而获得更高的代

C++11 标准新特性: 右值引用与转移语义

C++ 的新标准 C++11 已经发布一段时间了.本文介绍了新标准中的一个特性,右值引用和转移语义.这个特性能够使代码更加简洁高效. 查看本系列更多内容 | 3 评论: 李 胜利, 高级开发工程师, IBM 2013 年 7 月 10 日 内容 在 IBM Bluemix 云平台上开发并部署您的下一个应用. 开始您的试用 新特性的目的 右值引用 (Rvalue Referene) 是 C++ 新标准 (C++11, 11 代表 2011 年 ) 中引入的新特性 , 它实现了转移语义 (Move

【转】C++11 标准新特性:Defaulted 和 Deleted 函数

原文链接http://www.ibm.com/developerworks/cn/aix/library/1212_lufang_c11new/ 本文将介绍 C++11 标准的两个新特性:defaulted 和 deleted 函数.对于 defaulted 函数,编译器会为其自动生成默认的函数定义体,从而获得更高的代码执行效率,也可免除程序员手动定义该函数的工作量.对于 deleted 函数, 编译器会对其禁用,从而避免某些非法的函数调用或者类型转换,从而提高代码的安全性.本文将通过代码示例详

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

在C++11标准中定义了很多算法,这些算法可以让我们很方便的操作各种容器和数组,这里要注意一下,这些算法操作的并非容器,而是迭代器,然后通过迭代器来操作容器中的数据,算法本身并不会关注容器中保存的数据的类型. 以下是我对常识的算法的总结,这些算法大部分都在algorithm.h中,还有一些在numeric.h中. 这里我们的容器都用这几个: vector<string> vec; vector<int> vec1; vec<string> vec2; 1.find();

在codeblocks中使用C++11标准

刚刚在codeblocks中调试一个程序,发现默认并不支持C++11标准,因此有了报错. 其实解决方法很简单. 在你的当前工程,或者新建了工程后,选择选项卡中的"Setting",然后选择"Compiler". 如下图勾选上即可--

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

转:http://www.cnblogs.com/lizhenghn/p/3550996.html C++11标准在2011年8月份获得一致通过,这是自1998年后C++语言第一次大修订,对C++语言进行了改进和扩充.随后各编译器厂商都各自实现或部分实现了C++中的特性. 如需查看各编译器对C++11的支持程度,请参看文章: 本文主要介绍在Linux系统下,如何升级GCC以支持C++11.目前来看GCC是对C++11支持程度最高最多的编译器,但需要GCC4.8及以上版本.  本文使用操作系统:C