轉載地址: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
>
|