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

简介: 本节书摘来自华章计算机《深入理解C++11:C++ 11新特性解析与应用》一书中的第1章,第1.2节,作者 IBM XL编译器中国开发团队,更多章节内容可以访问云栖社区“华章计算机”公众号查看。

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有哪些显著的增强呢?事实上,这包括以下几点:

image

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

image
image
image

而从另一个角度看,编程中程序员往往需要将实物、流程、概念等进行抽象描述。但通常情况下,程序员需要抽象出的不仅仅是对象,还有一些其他的概念,比如类型、类型的类型、算法,甚至是资源的生命周期,这些实际上都是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的支持情况。

相关文章
|
8天前
|
存储 C++ 容器
C++STL(标准模板库)处理学习应用案例
使用C++ STL,通过`std:vector`存储整数数组 `{5, 3, 1, 4, 2}`,然后利用`std::sort`进行排序,输出排序后序列:`std:vector<int> numbers; numbers = {5, 3, 1, 4, 2}; std:sort(numbers.begin(), numbers.end()); for (int number : numbers) { std::cout << number << " "; }`
15 2
|
12天前
|
存储 缓存 安全
掌握Go语言:Go语言中的字典魔法,高效数据检索与应用实例解析(18)
掌握Go语言:Go语言中的字典魔法,高效数据检索与应用实例解析(18)
|
18天前
|
存储 C++ 容器
C++入门指南:string类文档详细解析(非常经典,建议收藏)
C++入门指南:string类文档详细解析(非常经典,建议收藏)
31 0
|
20天前
|
安全 算法 C++
【C/C++ 泛型编程 应用篇】C++ 如何通过Type traits处理弱枚举和强枚举
【C/C++ 泛型编程 应用篇】C++ 如何通过Type traits处理弱枚举和强枚举
44 3
|
16天前
|
存储 缓存 算法
Python中collections模块的deque双端队列:深入解析与应用
在Python的`collections`模块中,`deque`(双端队列)是一个线程安全、快速添加和删除元素的双端队列数据类型。它支持从队列的两端添加和弹出元素,提供了比列表更高的效率,特别是在处理大型数据集时。本文将详细解析`deque`的原理、使用方法以及它在各种场景中的应用。
|
18天前
|
安全 Java 数据安全/隐私保护
【深入浅出Spring原理及实战】「EL表达式开发系列」深入解析SpringEL表达式理论详解与实际应用
【深入浅出Spring原理及实战】「EL表达式开发系列」深入解析SpringEL表达式理论详解与实际应用
40 1
|
2天前
|
SQL API 数据库
Python中的SQLAlchemy框架:深度解析与实战应用
【4月更文挑战第13天】在Python的众多ORM(对象关系映射)框架中,SQLAlchemy以其功能强大、灵活性和易扩展性脱颖而出,成为许多开发者首选的数据库操作工具。本文将深入探讨SQLAlchemy的核心概念、功能特点以及实战应用,帮助读者更好地理解和使用这一框架。
|
8天前
|
程序员 C++
C++语言模板学习应用案例
C++模板实现通用代码,以适应多种数据类型。示例展示了一个计算两数之和的模板函数`add<T>`,可处理整数和浮点数。在`main`函数中,展示了对`add`模板的调用,分别计算整数和浮点数的和,输出结果。
9 2
|
12天前
|
测试技术 API 智能硬件
语言模型在提升智能助手引用解析能力中的创新应用
【4月更文挑战第4天】苹果研究团队推出了ReALM,一种利用大型语言模型解决引用解析的新方法,提升智能助手理解用户意图和上下文的能力。ReALM将引用解析转化为语言建模问题,尤其擅长处理屏幕上的实体,比现有系统提升超5%,性能接近GPT-4但参数更少。其模块化设计易于集成,可在不同场景下扩展。然而,复杂查询处理和依赖上游数据检测器可能影响其准确性和稳定性。
61 6
语言模型在提升智能助手引用解析能力中的创新应用
|
16天前
|
数据采集 数据挖掘 Python
Python中collections模块的Counter计数器:深入解析与应用
在Python的`collections`模块中,`Counter`是一个强大且实用的工具,它主要用于计数可哈希对象。无论是统计单词出现的频率,还是分析数据集中元素的分布情况,`Counter`都能提供快速且直观的结果。本文将深入解析`Counter`计数器的原理、用法以及它在实际应用中的价值。

推荐镜像

更多