您的位置:首页 >C++ int转string方法及to_string用法技巧
发布于2026-02-25 阅读(0)
扫一扫,手机访问
std::to_string是C++11引入的字符串转换函数,需#include <string>,支持数值类型转字符串,但不支持char、bool(隐式转int)、自定义类型及格式控制。

只要编译器支持 C++11 或更高(基本所有现代编译器默认开启),std::to_string 就能直接用,无需额外头文件——它定义在 <string> 中,记得 #include <string>。
它支持 int、long、long long、unsigned 系列、float、double、long double。对 int 最常用:
int x = 42; std::string s = std::to_string(x); // s == "42"
注意:没有重载接受 char 或 bool(bool 会隐式转成 int,结果是 "0" 或 "1");也不支持自定义类型。
std::to_string 按十进制、无前导零、无符号位(负数带 '-')、无科学计数法输出。例如:
std::to_string(-123) → "-123"std::to_string(0) → "0"std::to_string(007) → "7"(因为 007 是八进制字面量,但值仍是 7)它**不提供**宽度填充、进制切换(如十六进制)、小数位数控制等功能。需要这些?得换方案:
std::ostringstream + std::setfill/std::setwstd::stringstream + std::hexstd::to_string 精度不可控,建议用 std::format(C++20)或 sprintf 风格最常踩的坑是写成 to_string(x)(没加 std::)而没开 using std::to_string,导致编译报错:error: 'to_string' was not declared in this scope。
另一个低级错误是拼成 toString 或 to_stringi,C++ 标准里只有 std::to_string —— 全小写,下划线分隔,无 i 无 Int 后缀。
还有人试图传指针:std::to_string(&x),这会尝试把地址转成字符串(实际调用的是 long long 重载),结果是未定义行为或巨大随机数,绝对不要这么干。
如果项目还停留在 C++98/C++03,std::to_string 不可用,得用 std::ostringstream:
int x = 42; std::ostringstream oss; oss << x; std::string s = oss.str();
如果频繁转换且性能敏感(比如循环内百万次),to_string 内部有内存分配,snprintf + std::string 构造可能更快(但可读性差):
int x = 42; char buf[12]; // int 通常不超过 11 位 + 符号 int len = snprintf(buf, sizeof(buf), "%d", x); std::string s(buf, len);
不过,除非 profiling 明确指出这是瓶颈,否则优先用 std::to_string —— 它语义清晰、类型安全、不易出错。
真正容易被忽略的是:std::to_string 对浮点数的输出精度由实现定义,不同标准库(libstdc++ / libc++ / MSVC)可能输出不同位数,比如 std::to_string(1.2) 可能是 "1.200000" 也可能是 "1.2"。需要确定格式,必须绕开它。
售后无忧
立即购买>office旗舰店
售后无忧
立即购买>office旗舰店
售后无忧
立即购买>office旗舰店
售后无忧
立即购买>office旗舰店
正版软件
正版软件
正版软件
正版软件
正版软件
1
2
3
7
9