阅读 66

boost/lexical_cast.hpp的简单使用方法_学着站在巨人的肩膀上_百度空间

boost/lexical_cast.hpp的简单使用方法_学着站在巨人的肩膀上_百度空间

boost/lexical_cast.hpp的简单使用方法

1、字符串->数值

C++代码

  1. #include <boost/lexical_cast.hpp>   

  2. #include <iostream>   

  3. int main()   

  4. {   

  5.         using boost::lexical_cast;   

  6.         int a = lexical_cast<int>("123");   

  7.         double b = lexical_cast<double>("123.12");   

  8.          std::cout<<a<<std::endl   

  9.          std::cout<<b<<std::endl;   

  10.         return 0;   

  11. }  

#include <boost/lexical_cast.hpp>#include <iostream>int main(){ using boost::lexical_cast; int a = lexical_cast<int>("123"); double b = lexical_cast<double>("123.12"); std::cout<<a<<std::endl std::cout<<b<<std::endl; return 0;}


2、数值->字符串

C++代码

  1. #include <boost/lexical_cast.hpp>   

  2. #include <string>   

  3. #include <iostream>   

  4. int main()   

  5. {   

  6.         using std::string;   

  7.         const double d = 123.12;   

  8.          string s = boost::lexical_cast<string>(d);   

  9.          std::cout<<s<<std::endl;   

  10.         return 0;   

  11. }  

#include <boost/lexical_cast.hpp>#include <string>#include <iostream>int main(){ using std::string; const double d = 123.12; string s = boost::lexical_cast<string>(d); std::cout<<s<<std::endl; return 0;}

3、异常

C++代码

  1. #include <boost/lexical_cast.hpp>   

  2. #include <iostream>   

  3. int main()   

  4. {   

  5.         using std::cout;   

  6.         using std::endl;   

  7.         int i;   

  8.         try  

  9.          {   

  10.              i = boost::lexical_cast<int>("xyz");   

  11.          }   

  12.         catch(boost::bad_lexical_cast& e)   

  13.          {   

  14.              cout<<e.what()<<endl;   

  15.             return 1;   

  16.          }   

  17.          cout<<i<<endl;   

  18.         return 0;   

  19. }  

#include <boost/lexical_cast.hpp>#include <iostream>int main(){ using std::cout; using std::endl; int i; try { i = boost::lexical_cast<int>("xyz"); } catch(boost::bad_lexical_cast& e) { cout<<e.what()<<endl; return 1; } cout<<i<<endl; return 0;}

显然“xyz”并不能转换为一个int类型的数值,于是抛出异常,捕捉后输出“bad lexical cast: source type value could not be interpreted as target”这样的信息。

4、注意事项

lexical_cast依赖于字符流std::stringstream,其原理相当简单:把源类型读入到字符流中,再写到目标类型中,就大功告成。

C++代码

  1. int d = boost::lexical_cast<int>("123");  

int d = boost::lexical_cast<int>("123");

相当于

C++代码

  1. int d;   

  2. std::stringstream s;   

  3. s<<"123";   

  4. s>>d;  

int d;std::stringstream s;s<<"123";s>>d;

5、小结

我们已经体验了boost::lexcial_cast。当然,lexical_cast不仅仅局限于字符串类型与数值类型之间的转换:可在任意可输出到stringstream的类型和任意可从stringstream输入的类型间转换。

;-)


文章分类
代码人生
版权声明:本站是系统测试站点,无实际运营。本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件至 XXXXXXo@163.com 举报,一经查实,本站将立刻删除。
相关推荐