从最初的代号C++0x到最终的名称C++11,C++的第二个真正意义上的标准姗姗来迟。可以想象,这个迟来的标准必定遭遇了许多的困难,而C++标准委员会应对这些困难的种种策略,则构成新的C++语言基因,我们可以从新的C++11标准中逐一体会。而客观上,这些基因也决定了C++11新特性的应用范畴。
相比其他语言的频繁更新,C++语言标准已经有十多年没有真正更新过了。而上一次标准制定,正是面向对象概念开始盛行的时候。较之基于过程的编程语言,基于面向对象、泛型编程等概念的C++无疑是非常先进的,而C++98标准的制定以及各种符合标准的编译器的出现,又在客观上推动了编程方法的革命。因此在接下来的很多年中,似乎人人都在学习并使用C++。商业公司在邀请C++专家为程序员讲课,学校里老师在为学生绘声绘色地讲解面向对象编程,C++的书籍市场也是百花齐放,论坛、BBS的C++板块则充斥了大量各种关于C++的讨论。随之而来的,招聘启事写着“要求熟悉C++编程”,派生与继承成为了面试官审视毕业生基础知识的重点。凡此种种,不一而足。于是C++语言“病毒性”地蔓延到各种编程环境,成为了使用最为广泛的编程语言之一。
相比于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++,并想进一步学习、了解C++11的程序员。这里我们假定读者已经具备了基本的C++编程知识,并掌握了一定的C++编程技巧(对于C++的初学者来说,本书阅读起来会有一定的难度)。
阅读前提
- C++11 的初、中级读者。
- 了解C++11,但所学不全面的人员。
- 高等院校理科学校C++课程的学生。
教程目录
什么是C++11/C++0x
C++11特性
C++11与C99兼容
C++11 long long整型
C++11 扩展的整型
C++11 宏__cplusplus
C++11 静态断言
C++11 noexcept和noexcept
C++11 快速初始化
C++11 非静态成员的sizeof
C++11 friend
C++11 final/override
C++11 模板函数
C++11 外部模板
C++11 模板实参
C++11 继承构造函数
C++11 委派构造函数
C++11 显式转换操作符
C++11 列表初始化
C++11 POD类型
C++11 非受限联合体
C++11 用户自定义字面量
C++11 内联名字空间
C++11 模板的别名
C++11 SFINEA规则
评论前必须登录!
注册