项目中遇到int转string方法,由于使用gnu++11编译,出现to_string不能使用的问题,网上介绍比较多方法如下:
template <typename T>
std::string to_string(T value)
{
std::ostringstream os ;
os << value ;
return os.str() ;
}
后来感觉此处在频繁使用的时候,有性能问题,故参考优化写法如下:
std::string to_string(int value) {
static const char digits[19] = {
'9','8','7','6','5','4','3','2','1','0',
'1','2','3','4','5','6','7','8','9'
};
static const char* zero = digits + 9;//zero->'0'
char buf[24]; //不考虑线程安全的情况时,可以改成静态变量
int i = value;
char *p = buf + 24;
*--p = '\0' ;
do {
int lsd = i % 10;
i /= 10;
*--p = zero[lsd];
} while (i != 0);
if (value <0)
*--p = '-';
return std::string(p);
}
参考: