深入理解C++11

出版时间:2013-6  出版社:Michael Wong、 IBM XL编译器中国开发团队 机械工业出版社 (2013-06出版)  
Tag标签:无  

前言

前言为什么要写这本书相比其他语言的频繁更新,C++语言标准已经有十多年没有真正更新过了。而上一次标准制定,正是面向对象概念开始盛行的时候。较之基于过程的编程语言,基于面向对象、泛型编程等概念的C++无疑是非常先进的,而C++98标准的制定以及各种符合标准的编译器的出现,又在客观上推动了编程方法的革命。因此在接下来的很多年中,似乎人人都在学习并使用C++。商业公司在邀请C++专家为程序员讲课,学校里老师在为学生绘声绘色地讲解面向对象编程,C++的书籍市场也是百花齐放,论坛、BBS的C++板块则充斥了大量各种关于C++的讨论。随之而来的,招聘启事写着“要求熟悉C++编程”,派生与继承成为了面试官审视毕业生基础知识的重点。凡此种种,不一而足。于是C++语言“病毒性”地蔓延到各种编程环境,成为了使用最为广泛的编程语言之一。十来年的时光转瞬飞逝,各种编程语言也在快马加鞭地向前发展。如今流行的编程语言几乎无一不支持面向对象的概念。即使是古老的语言,也通过了制定新标准,开始支持面向对象编程。随着Web开发、移动开发逐渐盛行,一些新流行起来的编程语言,由于在应用的快速开发、调试、部署上有着独特的优势,逐渐成为了这些新领域中的主流。不过这并不意味着C++正在失去其阵地。身为C的“后裔”,C++继承了C能够进行底层操作的特性,因此,使用C/C++编写的程序往往具有更佳的运行时性能。在构建包括操作系统的各种软件层,以及构建一些对性能要求较高的应用程序时,C/C++往往是最佳选择。更一般地讲,即使是由其他语言编写的程序,往往也离不开由C/C++编写的编译器、运行库、操作系统,或者虚拟机等提供支持。因此,C++已然成为了编程技术中的中流砥柱。如果用个比喻来形容C++,那么可以说这十来年C++正是由“锋芒毕露”的青年时期走向“成熟稳重”的中年时期。不过十来年对于编程语言来说也是个很长的时间,长时间的沉寂甚至会让有的人认为,C++就是这样一种语言:特性稳定,性能出色,易于学习而难于精通。长时间使用C++的程序员也都熟悉了C++毛孔里每一个特性,甚至是现实上的一些细微的区别,比如各种编译器对C++扩展的区别,也都熟稔于心。于是这个时候,C++11标准的横空出世,以及C++之父Bjarne Stroustrup的一句“看起来像一门新语言”的说法,无疑让很多C++程序员有些诚惶诚恐:C++11是否又带来了编程思维的革命?C++11是否保持了对C++98及C的兼容?旧有的C++程序到了C++11是否需要被推倒重来?事实上这些担心都是多余的。相比于C++98带来的面向对象的革命性,C++11带来的却并非“翻天覆地”式的改变。很多时候,程序员保持着“C++98式”的观点来看待C++11代码也同样是合理的。因为在编程思想上,C++11依然遵从了一贯的面向对象的思想,并深入加强了泛型编程的支持。从我们的观察来看,C++11更多的是对步入“成熟稳重”的中年时期的C++的一种改造。比如,像auto类型推导这样的新特性,展现出的是语言的亲和力;而右值引用、移动语义的特性,则着重于改变一些使用C++程序库时容易发生的性能不佳的状况。当然,C++11中也有局部的创新,比如lambda函数的引入,以及原子类型的设计等,都体现了语言与时俱进的活力。语言的诸多方面都在C++11中再次被锤炼,从而变得更加合理、更加条理清晰、更加易用。C++11对C++语言改进的每一点,都呈现出了经过长时间技术沉淀的编程语言的特色与风采。所以从这个角度上看,学习C++11与C++98在思想上是一脉相承的,程序员可以用较小的代价对C++的知识进行更新换代。而在现实中,只要修改少量已有代码(甚至不修改),就可以使用C++11编译器对旧有代码进行升级编译而获得新标准带来的好处,这也非常具有实用性。因此,从很多方面来看,C++程序员都应该乐于升级换代已有的知识,而学习及使用C++11也正是大势所趋。在本书开始编写的时候,C++11标准刚刚发布一年,而本书出版的时候,C++11也只不过才诞生了两年。这一两年,各个编译器厂商或者组织都将支持C++11新特性作为了一项重要工作。不过由于C++11的语言特性非常的多,因此本书在接近完成时,依然没有一款编译器支持C++11所有的新特性。但从从业者的角度看,C++11迟早会普及,也迟早会成为C++程序员的首选,因此即使现阶段编译器对C++新特性的支持还不充分,但还是有必要在这个时机推出一本全面介绍C++11新特性的中文图书。希望通过这样的图书,使得更多的中国程序员能够最快地了解C++11新语言标准的方方面面,并且使用最新的C++11编译器来从各方面提升自己编写的C++程序。读者对象本书针对的对象是已经学习过C++,并想进一步学习、了解C++11的程序员。这里我们假定读者已经具备了基本的C++编程知识,并掌握了一定的C++编程技巧(对于C++的初学者来说,本书阅读起来会有一定的难度)。通过本书,读者可以全面而详细地了解C++11对C++进行的改造。无论是试图进行更加精细的面向对象程序编写,或是更加容易地进行泛型编程,或是更加轻松地改造使用程序库等,读者都会发现C++11提供了更好的支持。本书作者和书籍支持本书的作者都是编译器行业的从业者,主要来自于IBM XL编译器中国开发团队。IBM XL编译器中国开发团队创立于2010年,拥有编译器前端、后端、性能分析、测试等各方面的人员,工作职责涵盖了IBM XL C/C++及IBM XL Fortran编译器的开发、测试、发布等与编译器产品相关的方方面面。虽然团队成立时间不长,成员却都拥有比较丰富的编译器开发经验,对C++11的新特性也有较好的理解。此外,IBM北美编译器团队成员Michael(他是C++标准委员会的成员)也参加了本书的编写工作。在书籍的编写上,Michael为本书拟定了提纲、确定了章节主题,并直接编写了本书的首章。其余作者则分别对C++11各种新特性进行了详细研究讨论,并完成了书稿其余各章的撰写工作。在书稿完成后,除了请Michael为本书的部分章节进行了审阅并提出修改意见外,我们又邀请了IBM中国信息开发部及IBM北京编译器团队的一些成员对本书进行了详细的审阅。虽然在书籍的策划、编写、审阅上我们群策群力,尽了最大的努力,以保证书稿质量,不过由于C++11标准发布时间不长,理解上的偏差在所难免,因此本书也可能在特性描述中存在一些不尽如人意或者错误的地方,希望读者、同行等一一为我们指出纠正。我们也会通过博客、微博发布与本书相关的所有信息,并与本书读者共同讨论、进步。如何阅读本书读者在书籍阅读中可能会发现,本书的一些章节对C++基础知识要求较高,而某些特性很可能很难应用于自己的编程实践。这样的情况应该并不少见,但这并不是这门语言缺乏亲和力,或是读者缺失了背景知识,这诚然是由于C++的高成熟度导致的。在C++11中,不少新特性都会局限于一些应用场景,比如说库的编写,而编写库却通常不是每个程序员必须的任务。为了避免这样的状况,本书第1章对C++11的语言新特性进行了分类,因此读者可以选择按需阅读,对不想了解的部分予以略过。一些本书的使用约定,读者也可以在第1章中找到。致谢在这里我们要对IBM中国信息开发部的陈晶(作者之一)、卢昉、付琳,以及IBM北京编译器团队的冯威、许小羽、王颖对本书书稿详尽细致的审阅表示感谢,同时也对他们专业的工作素养表示由衷的钦佩。此外,我们也要感谢IBM XL编译器中国开发团队的舒蓓、张嗣元两位经理在本书编写过程中给予的大力支持。而IBM图书社区的刘慎峰及华章图书的杨福川编辑的辛勤工作则保证了本书的顺利出版,在这里我们也要对他们以及负责初审工作的孙海亮编辑说声谢谢。此外,我们还要感谢各位作者的家人在书籍编写过程中给予作者的体谅与支持。最后要感谢的是本书的读者,感谢你们对本书的支持,希望通过这本书,我们能够一起进入C++编程的新时代。IBM XL编译器中国开发团队

内容概要

《深入理解C++11:C++11新特性解析与应用》内容简介:国内首本全面深入解读C++11新标准的专著,由C++标准委员会代表和IBM XL编译器中国开发团队共同撰写。不仅详细阐述了C++11标准的设计原则,而且系统地讲解了C++11新标准中的所有新语言特性、新标准库特性、对原有特性的改进,以及如何应用所有这些新特性。
《深入理解C++11:C++11新特性解析与应用》一共8章:第1章从设计思维和应用范畴两个维度对C++11新标准中的所有特性进行了分类,呈现了C++11新特性的原貌;第2章讲解了在保证与C语言和旧版C++标准充分兼容的原则下增加的一些新特性;第3章讲解了具有广泛可用性、能与其他已有的或者新增的特性结合起来使用的、具有普适性的一些新特性;第4章讲解了C++11新标准对原有一些语言特性的改进,这些特性不仅能让C++变得更强大,还能提升程序员编写代码的效率;第5章讲解了C++11在安全方面所做的改进,主要涵盖枚举类型安全和指针安全两个方面的内容;第6章讲解了为了进一步提升和挖掘C++程序性能和让C++能更好地适应各种新硬件的发展而设计的新特性,如多核、多线程、并行编程方面的新特性;第7章讲解了一些颠覆C++一贯设计思想的新特性,如lambda表达式等;第8章讲解了C++11为了解决C++编程中各种典型实际问题而做出的有效改进,如对Unicode的深入支持等。附录中则介绍了C++11标准与其他相关标准的兼容性和区别、C++11中弃用的特性、编译器对C++11的支持情况,以及学习C++11的相关资源。

作者简介

作者:(加拿大)Michael Wong IBM XL编译器中国开发团队Michael Wong,C++11标准委员会(WG21)委员,WG21加拿大代表团团长及IBM公司代表(投票人),WG21 SG5(transactional Memory study group)学习小组组长。除此之外,Michael还是OpenMP委员会的CEO,SCC(Standards Council of Canada)的副主席。Michael是多个C++11/OpenMP/STM新特性的合作编写者,活跃于各种技术会议,而且为Programming Committee of Boost以及IWOMP等国际会议服务。Michael也是IBM公司的高级技术专家,领导IBM XL C++编译器、XL C编译器的开发工作,当前致力于IBM编译器的C++11新特性部署。Michael在并行编程、C++基准测试、对象模型、泛型编程、模板元编程等多个技术领域均有涉猎,并且在对象模型以及事务内存等方面取得过多个专利。早年Michael于多伦多大学获取得了天体物理学的学士学位,并在滑铁卢大学获得了硕士学位。在加入IBM之前,Michael曾先后供职于大卫?邓禄普天文台(David Dunlap Observatory),CDC公司(Control Data Corporation),BMO Nesbitt Burns公司等。IBM XL编译器中国开发团队,IBM拥有悠久的编译器开发历史(始于上世纪80年代),在全球有将近400名高素质工程师组成的研发团队,其中包括许多世界知名的研究学者和技术专家。IBM一直以来都是编程语言的制定者和倡导者之一,并将长期在编译领域进行研发和投资。IBM编译器中国开发团队于2010年在上海成立,现拥有编译器前端开发人员(C/C++)、后端开发人员、测试人员,以及性能分析人员共16人。团队与IBM北美编译器团队紧密合作,共同开发、测试和发布基于POWER系统的AIX及Linux平台下的XL C/C++和XL Fortran系列产品,并对其提供技术支持。虽然团队成立时间不长,但已于2012年成功发布最新版本的XL C/C++ for Linux V12.1 & XL Fortran for Linux V14.1,并获得7项发明专利。团队成员拥有较丰富的编译器开发经验,对编译技术、编程语言、性能优化和并行计算等各领域都有一定的研究,也对C++11标准的各种新特性有较早的研究和理解,并正在实际地参与C++11新特性的开发工作。

书籍目录

免责声明序前言第1章 新标准的诞生 11.1 曙光:C++11标准的诞生 11.1.1 C++11/C++0x(以及C11/C1x)——新标准诞生 11.1.2 什么是C++11/C++0x 21.1.3 新C++语言的设计目标 31.2 今时今日的C++ 51.2.1 C++的江湖地位 51.2.2 C++11语言变化的领域 51.3 C++11特性的分类 71.4 C++特性一览 111.4.1 稳定性与兼容性之间的抉择 111.4.2 更倾向于使用库而不是扩展语言来实现特性 121.4.3 更倾向于通用的而不是特殊的手段来实现特性 131.4.4 专家新手一概支持 131.4.5 增强类型的安全性 141.4.6 与硬件紧密合作 141.4.7 开发能够改变人们思维方式的特性 151.4.8 融入编程现实 161.5 本书的约定 171.5.1 关于一些术语的翻译 171.5.2 关于代码中的注释 171.5.3 关于本书中的代码示例与实验平台 18第2章 保证稳定性和兼容性 192.1 保持与C99兼容 192.1.1 预定义宏 192.1.2 _func_预定义标识符 202.1.3 _Pragma操作符 222.1.4 变长参数的宏定义以及_VA_ARGS_ 222.1.5 宽窄字符串的连接 232.2 long long整型 232.3 扩展的整型 252.4 宏_cplusplus 262.5 静态断言 272.5.1 断言:运行时与预处理时 272.5.2 静态断言与static_assert 282.6 noexcept修饰符与noexcept操作符 322.7 快速初始化成员变量 362.8 非静态成员的sizeof 392.9 扩展的friend语法 402.10 final/override控制 442.11 模板函数的默认模板参数 482.12 外部模板 502.12.1 为什么需要外部模板 502.12.2 显式的实例化与外部模板的声明 522.13 局部和匿名类型作模板实参 542.14 本章小结 55第3章 通用为本,专用为末 573.1 继承构造函数 573.2 委派构造函数 623.3 右值引用:移动语义和完美转发 683.3.1 指针成员与拷贝构造 683.3.2 移动语义 693.3.3 左值、右值与右值引用 753.3.4 std:move:强制转化为右值 803.3.5 移动语义的一些其他问题 823.3.6 完美转发 853.4 显式转换操作符 893.5 列表初始化 923.5.1 初始化列表 923.5.2 防止类型收窄 963.6 POD类型 983.7 非受限联合体 1063.8 用户自定义字面量 1103.9 内联名字空间 1133.10 模板的别名 1183.11 一般化的SFINEA规则 1193.12 本章小结 121第4章 新手易学,老兵易用 1234.1 右尖括号>的改进 1234.2 auto类型推导 1244.2.1 静态类型、动态类型与类型推导 1244.2.2 auto的优势 1264.2.3 auto的使用细则 1304.3 decltype 1344.3.1 typeid与decltype 1344.3.2 decltype的应用 1364.3.3 decltype推导四规则 1404.3.4 cv限制符的继承与冗余的符号 1434.4 追踪返回类型 1454.4.1 追踪返回类型的引入 1454.4.2 使用追踪返回类型的函数 1464.5 基于范围的for循环 1504.6 本章小结 153第5章 提高类型安全 1555.1 强类型枚举 1555.1.1 枚举:分门别类与数值的名字 1555.1.2 有缺陷的枚举类型 1565.1.3 强类型枚举以及C++11对原有枚举类型的扩展 1605.2 堆内存管理:智能指针与垃圾回收 1635.2.1 显式内存管理 1635.2.2 C++11的智能指针 1645.2.3 垃圾回收的分类 1675.2.4 C++与垃圾回收 1695.2.5 C++11与最小垃圾回收支持 1705.2.6 垃圾回收的兼容性 1725.3 本章小结 173第6章 提高性能及操作硬件的能力 1746.1 常量表达式 1746.1.1 运行时常量性与编译时常量性 1746.1.2 常量表达式函数 1766.1.3 常量表达式值 1786.1.4 常量表达式的其他应用 1806.2 变长模板 1836.2.1 变长函数和变长的模板参数 1836.2.2 变长模板:模板参数包和函数参数包 1856.2.3 变长模板:进阶 1896.3 原子类型与原子操作 1966.3.1 并行编程、多线程与C++11 1966.3.2 原子操作与C++11原子类型 1976.3.3 内存模型,顺序一致性与memory_order 2036.4 线程局部存储 2146.5 快速退出:quick_exit与at_quick_exit 2166.6 本章小结 219第7章 为改变思考方式而改变 2207.1 指针空值-nullptr 2207.1.1 指针空值:从0到NULL,再到nullptr 2207.1.2 nullptr和nullptr_t 2237.1.3 一些关于nullptr规则的讨论 2257.2 默认函数的控制 2277.2.1 类与默认函数 2277.2.2 “= default”与“= deleted” 2307.3 lambda函数 2347.3.1 lambda的一些历史 2347.3.2 C++11中的lambda函数 2357.3.3 lambda与仿函数 2387.3.4 lambda的基础使用 2407.3.5 关于lambda的一些问题及有趣的实验 2437.3.6 lambda与STL 2477.3.7 更多的一些关于lambda的讨论 2547.4 本章小结 256第8章 融入实际应用 2588.1 对齐支持 2588.1.1 数据对齐 2588.1.2 C++11的alignof和alignas 2618.2 通用属性 2678.2.1 语言扩展到通用属性 2678.2.2 C++11的通用属性 2688.2.3 预定义的通用属性 2708.3 Unicode支持 2748.3.1 字符集、编码和Unicode 2748.3.2 C++11中的Unicode支持 2768.3.3 关于Unicode的库支持 2808.4 原生字符串字面量 2848.5 本章小结 286附录A C++11对其他标准的不兼容项目 287附录B 弃用的特性 294附录C 编译器支持 301附录D 相关资源 304

编辑推荐

《深入理解C++11:C++11新特性解析与应用》编辑推荐:C++标准委员会成员和IBM XL编译器中国开发团队共同撰写,权威性毋庸置疑。系统、深入、详尽地讲解了C++11新标准中的新语言特性、新标准库特性、对原有特性的改进,以及所有这些新特性的应用。

图书封面

图书标签Tags

评论、评分、阅读与下载


    深入理解C++11 PDF格式下载


用户评论 (总计8条)

 
 

  •   买书的时候这本是第一本专门介绍C++11的书籍,通读一遍感觉还不错
  •   了解C++11 很不错的书籍
  •   对特性的讲解很深入,只可惜本书没有涉及太多新的STL库的内容。
  •   不错这本书,适合想了解c++11的同学
  •   很好,c++11确实改进很多,该书对新特性阐述得很到位!
  •   所有::符号都印成了:,代码里全角半角不分,也不对齐。书还行,但是没讲全
  •   比较全面,而且有些东西先的C++编译器好像都不支持。
  •   翻译的很一般。内容也不怎么样。
 

250万本中文图书简介、评论、评分,PDF格式免费下载。 第一图书网 手机版

京ICP备13047387号-7