《深入理解C++11:C++ 11新特性解析与应用》——1.2 今时今日的C++

1.2 今时今日的C++

1.2.1 C++的江湖地位

如今C++依旧位列通用编程语言三甲,不过似乎没有以前那么流行了。事实上,编程语言排名通常非常难以衡量。比如,某位教授或学生用了C++来教授课程应该被计算在内吗?在新的联合攻击战斗机(Joint Strike Fighter,JSF-35)的航空电子设备中使用了C++编程应该计算在内吗?又或者C++被用于一款流行的智能手机操作系统的编程中算不算呢?再或者是C++被用于编写最流行的在线付费搜索引擎,或用于构建一款热门的第一人称射击游戏的引擎,或用于构建最热门的社交网络的代码库,这些都该计算在内吗?事实上,据我们所知,以上种种都使用了C++编程。而且在构建致力于沟通软硬件的系统编程中,C++也常常是必不可少的。甚至,C++还常用于设计和编写编程语言。因此我们可以认为,编程语言价值的衡量标准应该包括数量、新颖性、质量,以及以上种种,都应该纳入“考核”。这样一来,结论就很明显了:C++无处不在。

1.2.2 C++11语言变化的领域

如果谁说C++11只是对C++语言做了大幅度的改进,那么他很可能就错过了C++11精彩的地方。事实上,读罢本书后,读者只需要看一眼代码,就可以说出代码究竟是C++98/03的,还是C++11的。C++11为程序员创造了很多更有效、更便捷的代码编写方式,程序员可以用简短的代码来完成C++98/03中同样的功能,简单到你惊呼“天哪,怎么能这么简单”。从一些简单的数据统计上看,比起C++98/03,C++11大大缩短了代码编写量,依情况最多可以将代码缩短30%~80%。

那么C++11相对于C++98/03有哪些显著的增强呢?事实上,这包括以下几点:

表1-2列出了C++11批准通过的,且本书将要涉及的语言特性。这是一张相当长的表,而且一个个陌生的词汇足以让新手不知所措。不过现在还不是了解它们的时候。但看过这张表,读者至少会有这样一种感觉:C++11的确像是一门新的语言。如果我们将C++98/03标准中的特性和C++11放到一起,C++11则像是个恐怖的“编程语言范型联盟”。利用它不仅仅可以写出面向对象语言的代码,也可以写出过程式编程语言代码、泛型编程语言代码、函数式编程语言代码、元编程编程语言代码,或者其他。多范型的支持使得C++11语言的“硬能力”几乎在编程语言中“无出其右”。



而从另一个角度看,编程中程序员往往需要将实物、流程、概念等进行抽象描述。但通常情况下,程序员需要抽象出的不仅仅是对象,还有一些其他的概念,比如类型、类型的类型、算法,甚至是资源的生命周期,这些实际上都是C++语言可以描述的。在C++11中,这些抽象概念常常被实现在库中,其使用将比在C++98/03中更加方便,更加好用。从这个角度上讲,C++11则是一种所谓的“轻量级抽象编程语言”(Lightweight Abstraction Programming Language)。其好处就是程序员可以将程序设计的重点更多地放在设计、实现,以及各种抽象概念的运用上。

总的来说,灵活的静态类型、小的抽象概念、绝佳的时间与空间运行性能,以及与硬件紧密结合工作的能力都是C++11突出的亮点。而反观C++98/03,其最强大的能力则可能是体现在能够构建软件基础架构,或构建资源受限及资源不受限的项目上。因此,C++11也是C++在编程语言领域上一次“泛化”与进步。

要实现表1-2中的各种特性,需要编译器完成大量的工作。对于大多数编译器供应商来说,只能分阶段地发布若干个编译版本,逐步支持所有特性(罗马从来就不是一天建成的,对吧)。大多数编译器已经开始了对C++11特性的支持。有3款编译器甚至从2008年前就开始支持C++11了:IBM的XL C/C++编译器从版本10.1开始。GNU的GCC编译器从版本4.3开始,英特尔编译器从版本10.1开始。而微软则从Visual Studio 2010开始。最近,苹果的clang/llvm编译器也从2010年的版本2.8开始支持C++11新特性,并且急速追赶其他编译器供应商。在本书附录C中,读者可以找到现在情况下各种编译器对C++11的支持情况。

时间: 2024-10-31 00:08:43

《深入理解C++11:C++ 11新特性解析与应用》——1.2 今时今日的C++的相关文章

《深入理解C++11:C++ 11新特性解析与应用》——第3章 通用为本,专用为末 3.1 继承构造函数

第 3 章 通用为本,专用为末 C++11的设计者总是希望从各种方案中抽象出更为通用的方法来构建新的特性.这意味着C++11中的新特性往往具有广泛的可用性,可以与其他已有的,或者新增的语言特性结合起来进行自由的组合,或者提升已有特性的通用性.这与在语言缺陷上"打补丁"的做法有着本质的不同,但也在一定程度上拖慢了C++11标准的制定.不过现在一切都已经尘埃落定了.在本章里读者可以看到这些经过反复斟酌制定的新特性,并体会其"普适"的特性.当然,要对一些形如右值引用.移动

深入理解C# 3.x的新特性(1): Anonymous Type

在C#3.0中,引入了一个新的Feature:Anonymous Method,允许我们已Inline的方式来定义Delegate,为Developer在Coding的时候带来了很大的便利.在C#3.0中,我们又有了另一个相似的Feature:Anonymous Type.Anonymous Type允许我们已Inline的方式的创建一个基于未知类型.具有所需数据结构的对象. 一.Anonymous Type Overview  在传统的编程模式中,对象依赖于一个既定的Type,我们只能在Typ

深入理解C# 3.x的新特性(2):Extension Method[上篇]

在C#3.0中,引入了一些列新的特性,比如: Implicitly typed local variable, Extension method,Lambda expression, Object initializer, Anonymous type, Implicitly typed array, Query expression, Expression tree. 个人觉得在这一系列新特性的,最具创新意义的还是Extension method,它从根本上解决了这样的问题:在保持现有Type

深入理解C# 3.x的新特性(2):Extension Method[下篇]

四.Extension Method的本质 通过上面一节的介绍,我们知道了在C#中如何去定义一个Extension Method:它是定义在一个Static class中的.第一个Parameter标记为this关键字的Static Method.在这一节中,我们来进一步认识Extension Method. 和C# 3.0的其他新特性相似,Extension Method仅仅是C#这种.NET Programming Language的新特性而已.我们知道,C#是一种典型的编译型的语言,我们编

深入理解C#3.x的新特性(4):Automatically Implemented Property

深入理解C#3.x的新特性系列在沉寂一个月之后,今天继续.在本系列前3部分中,我们分别讨论了Anonymous Type,Extension Method 和Lambda Expression,今天我们来讨论另一个实用的.有意思的New feature:Automatically Implemented Property. 一.繁琐的private field + public property Definition 相信大家大家已经习惯通过一个private field + public pr

深入理解C# 3.x的新特性(5):Object Initializer 和 Collection Initializer

深入理解C# 3.x的新特性系列自开篇以后,已经有两个月了.在前面的章节中,我们先后深入讨论了C# 3.x新引入的一些列新特性:Anomynous Type.Extension Method.Lambda Expression.Automatically Implemented Property,今天我们来讨论本系列的涉及的另外两个简单的Feature: Object Initializer 和 Collection Initializer. 一.           为什么要引入Object

[原创]深入理解C# 3.x的新特性(3):从Delegate、Anonymous Method到Lambda Expression

较之前一个版本,对于C# 3.x和VB 9来说,LINQ是最具吸引力的.基本上很多的新的特性都是围绕着LINQ的实现来设计的.借助Extension Method,我们可以为LINQ定义一系列的Operator.通过Lambda Expression我们可以为LINQ编写更加简洁的查询.我们可以说这些新的特性成就了LINQ,也可以说这些新特性就是为了实现LINQ而产生,但是我们应该明白,对于这些新引入的特性,LINQ并非他们唯一的用武之地,在一般的编程中,我们也可以使用它们. 继上一章,介绍Ex

《深入理解C++11:C++ 11新特性解析与应用》——2.14 本章小结

2.14 本章小结 在本章中,我们可以看到C++11大大小小共17处改动.这17处改动,主要都是为保持C++的稳定性以及兼容性而增加的. 比如为了兼容C99,C++11引入了4个C99的预定的宏.__func__预定义标识符._Pragma操作符.变长参数定义,以及宽窄字符连接等概念.这些都是错过了C++98标准,却进入了C99的一些标准,为了最大程度地兼容C,C++将这些特性全都纳入C++11.而由于标准的更新,C++11也更新了__cplusplus宏的值,以表示新的标准的到来.而为了稳定性

《深入理解C++11:C++ 11新特性解析与应用》——2.9 扩展的friend语法

2.9 扩展的friend语法 类别:部分人 friend关键字在C++中是一个比较特别的存在.因为我们常常会发现,一些面向对象程序语言,比如Java,就没有定义friend关键字.friend关键字用于声明类的友元,友元可以无视类中成员的属性.无论成员是public.protected或是private的,友元类或友元函数都可以访问,这就完全破坏了面向对象编程中封装性的概念.因此,使用friend关键字充满了争议性.在通常情况下,面向对象程序开发的专家会建议程序员使用Get/Set接口来访问类

《深入理解C++11:C++ 11新特性解析与应用》——第1章 新标准的诞生 1.1 曙光:C++11标准的诞生

第 1 章 新标准的诞生 从最初的代号C++0x到最终的名称C++11,C++的第二个真正意义上的标准姗姗来迟.可以想象,这个迟来的标准必定遭遇了许多的困难,而C++标准委员会应对这些困难的种种策略,则构成新的C++语言基因,我们可以从新的C++11标准中逐一体会.而客观上,这些基因也决定了C++11新特性的应用范畴.在本章中,我们会从设计思维和应用范畴两个维度对所有的C++11新特性进行分类,并依据这种分类对一些特性进行简单的介绍,从而一览C++11的全景. 1.1 曙光:C++11标准的诞生