[轉] boost:lexical_cast用法

轉載地址:http://www.habadog.com/2011/05/07/boost-lexical_cast-intro/ios

1、lexical_cast的做用
lexical_cast使用統一的接口實現字符串與目標類型之間的轉換。c++

2、lexical_cast與c/c++提供相似接口的比較
標準c家族中包含此類函數,例如atoi與itoa等,它們的缺點是:
(1)各個轉換都是單向的,雙向轉換爲不一樣函數,各類轉換函數不一樣,接口衆多;
(2)僅支持基礎數據類型的子集,如int,long,double;
(3)不能提供統一的接口,易用性差;函數

c++中提供了stringstream,使用它進行格式轉換可讀性較差,使用起點較高,只是簡單的轉換,stringstream過重量級。spa

boost提供了lexical_cast,使用統一接口形式實現任意類型之間的轉換,加強了易用性。但若是須要嚴密控制精度的轉換,仍然推薦使用stringstream;數值之間的轉換,推薦使用numeric_cast。code

3、lexical_cast的接口形式接口

?
1
2
3
template < typename target,= "" typename = "" source= "" >
Target lexical_cast( const Source& arg);
</ typename >

4、lexical_cast的樣例代碼ci

?
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 >
相關文章
相關標籤/搜索