boost中的lexical_cast和numeric_cast
#include "stdafx.h"
using namespace std;
using boost::lexical_cast;
using boost::bad_lexical_cast;
using boost::numeric_cast;
using boost::bad_numeric_cast;
template<class T>
bool IsValid(const string& num){
bool flag=true;
try{
T temp=lexical_cast<T>(num);
}
catch (CFileException* e){
flag=false;
}
return flag;
}
using std::endl;
int _tmain(int argc, _TCHAR* argv[])
{
string s="6.02e-2";
try{
cout<<lexical_cast<double>(s)<<endl;
//cout<<lexical_cast<int>(s)<<endl;
}catch(bad_lexical_cast&e){
cerr<<e.what()<<endl;
}
try{
int i=32767;
short s=numeric_cast<short>(i);
cout<<s<<endl;
i++;
s=i;//发生上溢
cout<<s<<endl;//输出-32768
s=numeric_cast<short>(i);//抛出异常
int n=-3;
unsigned int m=n;//发生下溢
cout<<m<<endl;//输出4294967293
m=numeric_cast<unsigned int>(n);//抛出异常
}
catch(bad_numeric_cast&e){
cerr<<e.what()<<endl;
}
return 0;
}
using namespace std;
using boost::lexical_cast;
using boost::bad_lexical_cast;
using boost::numeric_cast;
using boost::bad_numeric_cast;
template<class T>
bool IsValid(const string& num){
bool flag=true;
try{
T temp=lexical_cast<T>(num);
}
catch (CFileException* e){
flag=false;
}
return flag;
}
using std::endl;
int _tmain(int argc, _TCHAR* argv[])
{
string s="6.02e-2";
try{
cout<<lexical_cast<double>(s)<<endl;
//cout<<lexical_cast<int>(s)<<endl;
}catch(bad_lexical_cast&e){
cerr<<e.what()<<endl;
}
try{
int i=32767;
short s=numeric_cast<short>(i);
cout<<s<<endl;
i++;
s=i;//发生上溢
cout<<s<<endl;//输出-32768
s=numeric_cast<short>(i);//抛出异常
int n=-3;
unsigned int m=n;//发生下溢
cout<<m<<endl;//输出4294967293
m=numeric_cast<unsigned int>(n);//抛出异常
}
catch(bad_numeric_cast&e){
cerr<<e.what()<<endl;
}
return 0;
}