深入理解C++11 ——C++11新特性解析与应用

24-05-24     slbcun     1061℃     0

当你在书店里拿起这本书的时候,可能最想问的就是:这么多C++的书籍,为什么需要选择这一本?回答这个问题首先需要知道的是,这是一本关于在2011年年底才制定通过的C++11(代码C++0x)的新标准的书籍。这个新标准看起来就像是一门新的语言,不仅有很多的新语言特性、标准库特性,而且在设计时就考虑了高度兼容于旧有的C++98/03标准。在2013年出版的C++的书籍中,本书是少数几部关于C++11的书籍之一,而其他的,则会是仅讲解C++98/03而未提及C++11的书籍。

相比于其他书籍,本书还有个显著特点——绝大多数章节都是由中国作者编写。事实上,本书所有作者均来自IBM XL C++编译器开发团队。而团队对于C++11新特性的开发,早在2008年就开始了。

而我则是一位IBM和加拿大的C++标准委员会的代表。我在编译器领域已工作了20多年。除了是IBM C++编译器开发团队的领导者之外,还是一些C++11特性的作者。

对于使用中文的C++用户而言,很多人还是喜欢阅读原生的中文图书,而非翻译版本,即使是在他们具备阅读其他语言能力的时候。虽然C++标准委员会的专家也在编写一些高质量的书籍,但是书籍从翻译到出版通常需要较长时间,而且一些词语或者意义都可能在翻译中丢失。而翻译者通常也会觉得技术书籍的翻译是门苦差,很多行话、术语通常难以找到准确的中文表达方式。这么一来不同的翻译者会使用不同的术语,即使是在同一本书中,有时同一术语也会翻译成不同的中文。这些状况都是C++知识传播的阻碍,会拖慢C++11语言被中国程序员接受的进程。

基于以上种种原因,我们决定本书让母语是中文,并且了解国内外技术差距的IBM上海实验室的同事编写。我们知道,在中国有非常多的C++狂热爱好者正等着学习关于自己最爱的编程语言的新知识。而新的C++11也会招来大量的初级、中级用户,而本书也正好能满足这些人的需求。

所以,如果你属于以下几种状况之一,将会非常适合阅读本书:

❑C语言经验非常丰富且正在期待着看看C++11新功能的读者。

❑使用C++98/03并期待使用新的C++11的程序员。

❑任何对新的C++11语言感兴趣的人。

在本书中,我们引述了C++之父Bjarne Stroustrup教授关于C++11的设计原则。而事实上,本书的章节划分也是基于这些设计原则的,读者在第1章可以找到相关信息,而剩余章节则是基于该原则对每个C++11语言进行的划分。对于每个特性,本书将根据其相关的论文展开描述,讲解如设计的缘由、语法规则、如何使用等内容。而书后的附录,则包括当前的C++11编译器支持状况、不兼容性、废弃的特性,以及论文的链接等内容。

在读完本书后,读者应该能够回答以下问题:

❑什么是lambda,及怎么样使用它是最好的?

❑decltype和auto类型推导有什么关系?

❑什么是移动语义,以及(右值引用)是如何解决转发问题的?

❑default/deleted函数以及override是怎么回事?

❑异常描述符被什么替代了?noexcept是如何工作的?

❑什么是原子类型以及新的内存模型?

❑如何在C++11中做并行编程?

对于标准程序库,我们在本书中并没有介绍。这部分内容可能会成为我们下一本书的内容。这意味着我们将在下一本书中不仅会描述新的算法、新的类库,还会更多地描述原子类型。虽然出于性能考虑,大多数的编译器都是通过语言特性的方式来实现原子类型的,但在C++11标准中,原子类型却被视为一种库特性,因其可以通过库的方式来实现。同样的,这样一本书也不会教读者基础的C++知识,如果读者想了解这方面的内容,我们推荐Stroustrup教授的《Programming principles&Practice Using C++》(中文译为:《C++程序设计原理与实践》,华章公司已出版)。该书是Stroustrup教授以其在德克萨斯A&M大学教授的课程为基础编写的。

对C++11特性感兴趣的读者可以顺序阅读本书。当然,读者也可以直接阅读自己感兴趣的章节,但是读者阅读时肯定会发现,这些特性基本和其他的特性一样,遵从了相同的设计准则。

我们也希望本书对你的职业或者个人学习起到积极的作用。当然,我们在合作写作本书,以及在为IBM C++编译器开发C++11特性时,也颇有收获。

本书的编写经历了较长的时间,但这是值得的。我在C++标准委员会工作的时候,只是在考虑写这样一本书,而官孝峰则让我从这样的考虑转到了动手行动。继而他还激励并领导其他成员共同参与,最终完成了本书。

此外,我要感谢我的一些正式的以及非正式的导师,比如Bjarne Stroustrup、Herb Sutter、Hans Boehm、Anthony Williams、Scott Meyers,以及许多其他人,通过阅读他们的著作,或观察他们在委员会中的工作,我学会了很多。当然,更要感谢IBM为我们提供的平台、时间,以及各种便利,因为有了这些最终我们才能够超越自我,为新一代的程序员做一些事情,即使这样的事情可能微不足道。还要感谢的是我的家人,Sophie、Cameron、Spot(猫)和Susan,让我能够在空闲时间完成书籍编写。


分享 收藏 查看详细内容请点击:   下载
发表我的评论

表情

共0条评论
  • 这篇文章还没有收到评论,赶紧来抢沙发吧~