C++ boost之 conversion/lexical_cast

来源:互联网 发布:淘宝淘金币购买 编辑:程序博客网 时间:2024/05/16 23:47
  •  动 机
     
    有时候,我们必须把一个值转换成字面上一样的其它形式,比说把int型的数值转换成string型字符串,相反把string字 
     符串转成int型数值也一样。当程序内部数据类型相互转换或者程序内部数据类型转换成非程序内部类型(比如
    windows和配置
     文件),想上述的类型转换操作是最常见,也是最常用的。
     在标准C/C++库中,提供和很多关于类型转换的工具或功能函数。但是,它们缺乏
    易用性,可扩展性,和安全性。
     举一个例子,在标准C家族中有一个atoi的函数,在使用过程中它就有许多限制:
    1. 单边转换:仅从文本类型转换为内部数值类型。使用C库当中的函数进行类型转换,要么不方便、要么没有像sprintf那样安全、要么没有像其他非标准库那样简单。
    2. 范围小:其转换的范围仅仅是内建数字类型的一个子集(int,long和double类型)。
    3. 拓展性差:它不能扩展成一种特定类型,比如说把一个字符串转换成复数或有理数。

        C标准库中还有一个典型的strtol函数,它也有上述限制,不过在转换过程中提供了更好的控制。但是在一般情况下,
   这样的控制是不必要的或者很少用到的。scanf家族的功能函数提供的控制甚多,但也缺少安全性和易用性。

  

   现在我们来讨论,C++标准库中提供的一种核心类型格式化的函数stringstream。在类型格式化和在任意类型之间的I/O
   转换上,它提供了更好 的控制。然而,这么简单的转换就用stringstream显得太笨重和费解。

原创粉丝点击