
to_string 是 C++11 起标准库提供的函数,直接可用但有类型限制
std::to_string 是最简方式,但它只支持 int、long、long long、unsigned 系列、float、double、long double 这几种基本数值类型。不支持 short、char、bool(会转成 0/1,但语义易混淆),也不支持自定义类型或 std::int128_t 等扩展整型。
常见错误现象:
std::to_string('a'); // 编译通过,但结果是 "97"(ASCII 值)
std::to_string(true); // 编译通过,结果是 "1"这不是预期的字符或布尔字符串表示,容易引发逻辑 bug。
- 对
char用std::string(1, c)更安全 - 对
bool显式写b ? "true" : "false" - 对
short先转int:std::to_string(static_cast(s))
浮点数用 to_string 会截断精度,且不控制小数位数
std::to_string 对浮点数调用的是默认格式化(类似 %f),固定输出 6 位小数,且末尾零不省略。例如 std::to_string(3.14) 得到 "3.140000",std::to_string(1e5) 得到 "100000.000000",既冗余又不符合显示需求。
- 需要精确控制格式时,改用
std::ostringstream+std::setprecision/std::fixed - 科学计数法场景用
std::scientific - 想自动选
f或e格式?std::defaultfloat(C++11 起)
std::ostringstream oss;
oss << std::fixed << std::setprecision(2) << 3.14159;
std::string s = oss.str(); // "3.14"
to_string 在某些嵌入式或旧编译器上不可用
部分老版本 GCC(如 4.6 及更早)、MSVC 2010 或裸机环境(如没有完整 STL 的 freestanding 实现)中,std::to_string 可能未实现或行为异常。链接时可能报 undefined reference to 'std::to_string'。
本文档主要讲述的是Android数据格式解析对象JSON用法;JSON可以将Java对象转成json格式的字符串,可以将json字符串转换成Java。比XML更轻量级,Json使用起来比较轻便和简单。JSON数据格式,在Android中被广泛运用于客户端和服务器通信,在网络数据传输与解析时非常方便。希望本文档会给有需要的朋友带来帮助;感兴趣的朋友可以过来看看
立即学习“C++免费学习笔记(深入)”;
- 检查编译器版本和标准:确保
-std=c++11或更高 - 替代方案优先用
std::ostringstream(兼容性最好) - 极简场景可考虑
sprintf+std::string构造(需注意缓冲区大小)
char buf[32];
sprintf(buf, "%d", 42);
std::string s(buf); // 不推荐用于浮点或大数
性能敏感场景下 to_string 并非最优
std::to_string 内部仍依赖 std::ostringstream 或底层格式化函数,有堆分配和 locale 查找开销。高频调用(如日志循环、游戏帧更新)中,它比手写整数转字符串(如除 10 取余)慢 2–5 倍。
- 整数转字符串且范围可控(如 0–9999):查表法或模板展开更快
- 浮点数避免频繁
to_string,考虑预格式化缓存或二进制序列化 - 现代编译器(GCC 12+ / Clang 14+)对
to_string有部分优化,但别依赖
真正要兼顾简洁、安全和跨平台,std::ostringstream 虽啰嗦一点,反而最稳——尤其当你忘了 to_string 不支持 long long 在某些旧 libstdc++ 版本里会静默失败的时候。










