返回介绍

18.8 语言变化

发布于 2024-10-08 23:14:14 字数 2238 浏览 0 评论 0 收藏 0

计算机语言是如何成长和发展的呢?C++的使用范围足够广后,显然需要国际标准,并将其控制权交给标准委员会:最初是 ANSI 委员会,随后是 ISO/ANSI 联合委员会,当前是 ISO/IEC JTC1/SC22/WG21(C++标准委员会)。ISO 是国际标准组织,IEC 是国际电子技术委员会,JEC1 是前两家组织组建的联合技术委员会 1,SC22 是 JTC1 下属的编程语言委员会,而 WG21 是 SC22 下属的 C++工作小组。

委员会考虑缺陷报告和有关语言修改和扩展的提议,并试图达成一致。这个过程既繁琐又漫长,《The Dsign and Evolution of C++》(Stroustrup,Addison-Wesley,1994)介绍了这方面的一些情况。寻求一致的委员会沉闷而争议不断,可能不是鼓励创新的好方式,这也不是标准委员会应扮演的角色。

但就 C++而言,还有另一种变更的途径,那就是充满创意的 C++编程社区的直接行动。程序员无法不受羁绊地改进语言,但可创建有用的库。设计良好的库可改善语言的用途和功能,提高可靠性,让编程更容易、更有乐趣。库是在现有语言功能的基础上创建的,不需要额外的编译器支持。如果库是通过模板实现的,则可以头文件(文本文件)的方式分发。

一项这样的变革是 STL,它主要是 Alexander Stepanov 创建的,Hewlett-Packard 免费提供它。STL 在编程社区获得了巨大成功,成了第一个 ANSI/ISO 标准的候选内容。事实上,其设计影响新标准的其他方面。

18.8.1 Boost 项目

最近,Boost 库成了 C++编程的重要部分,给 C++11 带来了深远影响。Boost 项目发起于 1998 年,当时的 C++库工作小组主席 Beman Dawes 召集其他几位小组成员制定了一项计划,准备在标准委员会的框架外创建新库。该计划的基本理念是,创建一个充当开放论坛的网站,让人发布免费的 C++库。这个项目提供有关许可和编程实践的指南,并要求对提议的库进行同行审阅。其最终的成果是,一系列得到高度赞扬和广泛使用的库。这个项目提供了一个环境,让编程社区能够检验和评估编程理念以及提供反馈。

18.8.2 TR1

TR1(Technical Report 1)是 C++标准委员会的部分成员发起的一个项目,它是一个库扩展选集,这些扩展与 C++98 标准兼容,但不是必不可少的。这些扩展是下一个 C++标准的候选内容。TR1 库让 C++社区能够检验其组成部分的价值。当标准委员会将 TR1 的大部分内容融入 C++11 时,面对的是众所皆知且经过实践检验的库。

在 TR1 中,Boost 库占了很大一部分。这包括模板类 tuple 和 array、模板 bind 和 function、智能指针(对名称和实现做了一定的修改)、static_assert、regex 库和 random 库。另外,Boost 社区和 TR1 用户的经验也导致了实际的语言变更,如异常规范的摒弃和可变参数模板的添加,其中可变参数模板让 tuple 模板类和 function 模板的实现更好了。

18.8.3 使用 Boost

虽然在 C++11 中,可访问 Boost 开发的众多库,但还有很多其他的 Boost 库。例如,Conversion 库中的 lexical_cast 让您能够在数值和字符串类型之间进行简单地转换,其语法类似于 dynamic_cast:将模板参数指定为目标类型。程序清单 18.11 是一个简单示例。

程序清单 18.11 lexcast.cpp

下面是两次运行该程序的情况:

第二次运行的结果凸显了 lexical_cast 的局限性:它未能很好地控制浮点数的格式。为控制浮点数的格式,需要使用更精致的内核格式化工具,这在第 17 章讨论过。

还可以使用 lexical_cast 将字符串转换为数值。

显然,Boost 提供的功能比这里介绍的要多得多。例如,Any 库让您能够在 STL 容器中存储一系列不同类型的值和对象,方法是将 Any 模板用作各种值的包装器。Math 库在标准 math 库的基础上增加了数学函数。Filesystem 库让您编写的代码可在使用不同文件系统的平台之间移植。有关这个库以及如何将其加入到各种平台的更详细信息,请参阅 Boost 网站(www.boost.org)。另外,有些 C++编译器(如 Cygwin 编译器)还自带了 Boost 库。

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。
列表为空,暂无数据
    我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
    原文