码迷,mamicode.com
首页 > 其他好文 > 详细

boost库学习之 lexical_cast

时间:2015-01-30 21:11:30      阅读:263      评论:0      收藏:0      [点我收藏+]

标签:boost   lexical_cast   

在C中字符串转换为数值,可以使用atoi()、atof()、atol()等,数值转换为字符串可以使用itoa()、sprintf()等,但itoa与编译器有关,并不是标准函数,而sprintf可能会不安全。
使用lexical_cast可以很容易地在数值与字符串之间转换,只需在模板参数中指定转换的目标类型即可。如
  int x = lexical_cast<int>("100");
	long y = lexical_cast<long>("10000");
	cout << x << " " << typeid(x).name() << endl;
	cout << y << " " << typeid(y).name() << endl;

	string strX = lexical_cast<string>(x);
	cout << strX << endl;

lexical_cast除了转换数值和字符串也可以只使用1或0转换bool类型.
当lexical_cast无法执行转换操作时会抛出bad_lexical_cast异常,它继承std::bad_cast,所以我们应使用try/catch保护转换代码,如
  try{
		int x = lexical_cast<int>("100");
		int y = lexical_cast<int>("test");
	} 
	catch (bad_lexical_cast& ex) {
		cout << ex.what() << endl;
	}

代码输出:bad lexical cast: source type value not be interpreted as target
如果被转换的参数是NULL, 如 int x = lexical_cast<int>(NULL); 那么x 为0
我们也可根据该异常来编写验证数字字符串的合法性
template<typename T>
bool isValidNumStr(const char* str) 
{
	if (str == nullptr) {
		return false;
	}

	try {
		lexical_cast<T>(str);
		return true;
	}
	catch (bad_lexical_cast& ex) {
		return false;
	}
}




boost库学习之 lexical_cast

标签:boost   lexical_cast   

原文地址:http://blog.csdn.net/aspnet_lyc/article/details/43311835

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!