c++数据类型万能转换器boost::lexical_cast .

boost::lexical_cast为数值之间的转换(conversion)提供了一揽子方案,比如:将一个字符串"123"转换成整数123,代码如下:

  1. string s = "123";  
  2. int a = lexical_cast<int>(s); 

这种方法非常简单,笔者强烈建议大家忘掉std诸多的函数,直接使用boost:: lexical_cast。如果转换发生了意外,lexical_cast会抛出一个bad_lexical_cast异常,因此程序中需要对其进行捕捉。

现在动手

编写如下程序,体验如何使用boost:: lexical_cast完成数值转换。

【程序 4-11】使用boost:: lexical_cast完成对象数值转换

  1. 01  #include "stdafx.h" 
  2. 02    
  3. 03  #include <iostream>  
  4. 04  #include <boost/lexical_cast.hpp>  
  5. 05    
  6. 06  using namespace std;  
  7. 07  using namespace boost;  
  8. 08    
  9. 09  int main()  
  10. 10  {  
  11. 11      string s = "123";  
  12. 12      int a = lexical_cast<int>(s);  
  13. 13      double b = lexical_cast<double>(s);  
  14. 14    
  15. 15      printf("%d/r/n", a + 1);  
  16. 16      printf("%lf/r/n", b + 1);  
  17. 17    
  18. 18      try 
  19. 19      {  
  20. 20          int c = lexical_cast<int>("wrong number");  
  21. 21      }  
  22. 22      catch(bad_lexical_cast & e)  
  23. 23      {  
  24. 24          printf("%s/r/n", e.what());  
  25. 25      }  
  26. 26    
  27. 27      return 0;28 } 

如上程序实现字符串"123"到整数、双精度实数的转换(为了防止程序作弊,我们特意让它将值加1),结果输出如图4-19所示。

 

 
(点击查看大图)图4-19  运行结果

 

光盘导读

该项目对应于光盘中的目录"/ch04/LexicalCastTest"。

===============================

以上摘自《把脉VC++》第4.6.2小节的内容 ,转载请注明出处。

如果你想与我交流,请点击如下链接加我为好友:http://student.csdn.net/invite.php?u=113292&c=8913f87cffe7d533

 

from:http://blog.csdn.net/bluejoe2000/article/details/4461421

时间: 2024-12-02 14:21:13

c++数据类型万能转换器boost::lexical_cast .的相关文章

C++流实现内幕---由boost::lexical_cast引发的一个问题

中午同事碰见一个关于使用boost::lexical_cast产生异常的问题,关键代码如下 string str(8,'/0'); strncpy(&str.at(0),"1234567",7); cout << lexical_cast<int>(str) << endl; 结果运行的时候发生如下异常 terminate called after throwing an instance of 'boost::bad_lexical_cas

boost库的常用组件的使用(ZT)

1.boost::any boost::any是一种通用的数据类型,可以将各种类型包装后统一放入容器内 最重要的它是类型安全的.有点象COM里面的variant. 使用方法: any::type() 返回包装的类型 any_cast可用于any到其他类型的转化    #include  < boost / any.hpp >  void  test_any() { typedef std::vector < boost::any >  many; many a; a.push_ba

boost uuid

uuid: uuid库是一个小的使用工具,可以表示和生成UUID UUID是University Unique Identifier的缩写,它是一个128位的数字(16字节),不需要有一个中央认证机构就可以创建全国唯一的标示符.别名:GUID uuid位于名字空间boost::uuisd,没有集中的头文件,把功能分散在了若干小文件中,因此为了使用uuid组件,需要包含数个头文件,即:#include <boost/uuid/uuid.hpp>#include <boost/uuid/uu

背景建模技术(八):bgslibrary_vs2010_mfc中boost的安装与配置

一.boost的下载与安装 在玩BGS Library时,有一个MFC的项目,在编译的过程中出现如下图的错误提示: 即: 1>e:\bgslibrary-master\vs2010mfc\src\stdafx.h(50): fatal error C1083: Cannot open include file: 'boost/lexical_cast.hpp': No such file or directory 根本原因在于没有安装和配置boost,下面对bgslibrary_vs2010_m

实战准标准库Boost(2)测试Boost配置的Hello World程序

1. 配置环境 请先按照<Boost C++ Libs -- (1)配置Boost的VS2008开发环境>一文在Visual Studio中配置开发环境. 2. 源码 #include <boost/lexical_cast.hpp> #include <iostream> using namespace std; int main() { using boost::lexical_cast; int a=lexical_cast<int>("12

编译Boost——Linux

相对于Windows来,Linux下的boost编译简单至极.没有那么多的可选编译器,没有那长的编译时间,没有那么多的硬盘使用量,统一的inlude和lib目录,你熟悉命令行,不使用IDE,不需要我那么罗嗦的介绍怎么配置EditPlus. 首先是下载boost,可以在此 http://sourceforge.net/projects/boost 寻找一个合适的版本.比如我下载的是boost_1_33_1.tar.gz,解压到/opt. tar xzvf boost_1_33_1.tar.gz -

linux下安装boost

久闻boost的大名了,今天终于决定也来体验一把. 对boost了解实在不多,所以先上boost的官方主页(http://www.boost.org/)看一下.在主页右边可以看到"Download"字眼,但是先不要急,"Download"下方有个"Getting Started",这对新手来说非常重要,必看(http://www.boost.org/more/getting_started.html)!里面对boost的安装作了详细的介绍. 从上

boost中asio网络库多线程并发处理实现,以及asio在多线程模型中线程的调度情况和线程安全。

1.实现多线程方法: 其实就是多个线程同时调用io_service::run         for (int i = 0; i != m_nThreads; ++i)        {            boost::shared_ptr<boost::thread> pTh(new boost::thread(                boost::bind(&boost::asio::io_service::run,&m_ioService)));       

Boost笔记

如下是阅读"Boost程序库完全开发指南-深入C++"准"标准库"的大纲学习摘要 一. Boost命名规则33 Boost库在VC编译器下支持库自动链接技术(使用#pragma comment (lib,xxx)),只 要把所有生成的lib拷贝到vc的搜索路径下,不需要你费心,编译器会自动根据编译选项找到 合适的库链接成可执行文件. 但如果读者使用的是GCC.XLC或者其他不支持自动链接技术的编译器,就有必要了解Boost库的命名规则,以便在链接时指定正确的库. l