转载地址:
一、lexical_cast的作用
lexical_cast使用统一的接口实现字符串与目标类型之间的转换。二、lexical_cast与c/c++提供类似接口的比较
标准c家族中包含此类函数,例如atoi与itoa等,它们的缺点是:(1)各个转换都是单向的,双向转换为不同函数,各种转换函数不同,接口众多;(2)仅支持基础数据类型的子集,如int,long,double;(3)不能提供统一的接口,易用性差;c++中提供了stringstream,使用它进行格式转换可读性较差,使用起点较高,只是简单的转换,stringstream太重量级。
boost提供了lexical_cast,使用统一接口形式实现任意类型之间的转换,增强了易用性。但如果需要严密控制精度的转换,仍然推荐使用stringstream;数值之间的转换,推荐使用numeric_cast。
三、lexical_cast的接口形式
1 2 3 | template < typename target,= "" typename = "" source= "" > Target lexical_cast( const Source& arg); </ typename > |
四、lexical_cast的样例代码
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 | #include "iostream" #include "boost/lexical_cast.hpp" // 需要包含的头文件 using boost::lexical_cast; using boost::bad_lexical_cast; using namespace std; int main() { char * p= "32768" ; int i=0; try { i=lexical_cast< int >(p); // 将字符串转化为整数 } catch (bad_lexical_cast&) // 转换失败会抛出一个异常 { i=0; } cout << i << endl; return i; } </ int > |