当前位置: 首页 > news >正文

第18章探讨C++新标准,语言变化,Boost 项目,TR1,使用 Boost

第18章探讨C++新标准,语言变化,Boost 项目,TR1,使用 Boost

第18章探讨C++新标准,语言变化,Boost 项目,TR1,使用 Boost

文章目录

  • 第18章探讨C++新标准,语言变化,Boost 项目,TR1,使用 Boost
  • 18.8 语言变化
  • 18.8.1 Boost 项目
  • 18.8.2 TR1
  • 使用 Boost18.8.3
  • 程序清单 18.11 lexcast.cpp


18.8 语言变化

计算机语言是如何成长和发展的呢?C++的使用范围足够广后,显然需要国际标准,并将其控制权交给标准委员会:最初是ANSI委员会,随后是ISO/ANSI联合委员会,当前是ISO/ECITC1/SC22/WG21(C+标准委员会)。ISO是国际标准组织,IEC是国际电子技术委员会,JEC1是前两家组织组建的联合技术委员会1,SC22是JTC1下属的编程语言委员会,而WG21是SC22下属的C++工作小组。委员会考虑缺陷报告和有关语言修改和扩展的提议,并试图达成一致。这个过程既繁琐又漫长,《TheDsign and Evolution ofC++》(Stroustrup,Addison-Wesley,1994)介绍了这方面的一些情况。寻求一致的委员会沉闷而争议不断,可能不是鼓励创新的好方式,这也不是标准委员会应扮演的角色。但就 C++而言,还有另一种变更的途径,那就是充满创意的 C++编程社区的直接行动。程序员无法不受羁绊地改进语言,但可创建有用的库。设计良好的库可改善语言的用途和功能,提高可靠性,让编程更容易、更有乐趣。库是在现有语言功能的基础上创建的,不需要额外的编译器支持。如果库是通过模板实现的,则可以头文件(文本文件)的方式分发。
一项这样的变革是 STL,它主要是Alexander Stepanov创建的,Hewlett-Packard 免费提供它。STL在编程社区获得了巨大成功,成了第一个ANSIISO 标准的候选内容。事实上,其设计影响新标准的其他方面。

18.8.1 Boost 项目

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

18.8.2 TR1

TR1(Technical Report1)是C++标准委员会的部分成员发起的一个项目,它是一个库扩展选集,这些扩展与 C++98标准兼容,但不是必不可少的。这些扩展是下一个C++标准的候选内容。TR1库让 C++社区能够检验其组成部分的价值。当标准委员会将TR1的大部分内容融入C++11时,面对的是众所皆知且经
过实践检验的库。在 TR1中,Boost 库占了很大一部分。这包括模板类 tuple和 array、模板 bind 和 fiunction、智能指针(对名称和实现做了一定的修改)、staticassert、regex库和random库。另外,Boost社区和 TR1用户的经验也导致了实际的语言变更,如异常规范的摒弃和可变参数模板的添加,其中可变参数模板让 tuple 模板类和 function 模板的实现更好了。

使用 Boost18.8.3

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

程序清单 18.11 lexcast.cpp

// lexcast.cpp -- simple cast from float to string
#include <iostream>
#include <string>
#include "boost/lexical_cast.hpp"
int main()
{using namespace std;cout << "Enter your weight: ";float weight;cin >> weight;string gain = "A 10% increase raises ";string wt = boost::lexical_cast<string>(weight);gain = gain + wt + " to ";  // string operator+()weight = 1.1 * weight;gain = gain + boost::lexical_cast<string>(weight) + ".";cout << gain << endl;return 0;
}

第二次运行的结果凸显了 lexical cast的局限性:它未能很好地控制浮点数的格式。为控制浮点数的格式,需要使用更精致的内核格式化工具,这在第17章讨论过。还可以使用lexicalcast将字符串转换为数值。
显然,Boost提供的功能比这里介绍的要多得多。例如,Any库让您能够在STL容器中存储一系列不同类型的值和对象,方法是将Any模板用作各种值的包装器。Math 库在标准math 库的基础上增加了数学函数。Filesystem 库让您编写的代码可在使用不同文件系统的平台之间移植。有关这个库以及如何将其加入到各种平台的更详细信息,请参阅 Boost网站(www.boost.org)。另外,有些C++编译器(如 Cygwin 编译器)还自带了 Boost库。


http://www.mrgr.cn/news/1457.html

相关文章:

  • 【Python学习-UI界面】PyQt5 小部件12-QStackedWidget 多页显示
  • H5漂流瓶交友源码_社交漂流瓶H5源码
  • 数组和字符串
  • 远程访问安全:rsync、ProFTPD、OpenSSH和VNC漏洞分析
  • windows C++-通过 C++/WinRT 创作 COM 组件(四)
  • git 如何生成sshkey公钥
  • 磁盘格式化文件恢复:一文看懂数据恢复操作
  • HUD抬头显示器杂散光检测全光谱日光模拟器
  • ubuntu18.04下安装nvidia3090显卡驱动
  • react用useEffect防止数据内存泄漏
  • 计算机储存单位换算:1KB等于多少GB
  • 【前端面试】挖掘做过的nextJS项目(下)——详谈服务端渲染
  • python实现泛洪攻击
  • netty4报错:io.netty.util.IllegalReferenceCountException: refCnt: 0, decrement: 1
  • 信号与线性系统实验二:连续信号与系统的频域分析
  • 游戏开发之性能优化
  • Git仓储迁移
  • 8月19日笔记
  • 23 注意力机制—BERT
  • 开源一款H5自适应留言表白墙php源码下载