在C++中,将数字转为字符串最常用的是 std::to_string 和 std::stringstream。两者都能完成任务,但适用场景、灵活性和性能有明显差异。
std::to_string 是 C++11 引入的轻量级函数,支持 int、long、long long、unsigned 类型及浮点数(float、double、long double)。它内部调用底层格式化逻辑,不依赖流状态,开销小、代码短。
std::string s = std::to_string(42); → "42"
std::to_string(3.1415926) → "3.141593
"(无法自定义精度)std::stringstream 基于 iostream 流机制,功能完整,可精确控制输出格式,相当于“字符串版 cout”。适合需要精度、进制、宽度、填充或混合类型拼接的场景。
std::stringstream ss; ss → "3.14"(需包含 )
ss → "ff"
ss → "00042"
ss
如果只是把一个整数或普通浮点数变成字符串,且不需要控制格式,std::to_string 更推荐——代码干净、意图明确、效率高。
一旦涉及精度、进制、对齐、前缀(如 0x)、符号控制或拼接多个值,std::stringstream 是更自然、更可控的选择。
注意:std::to_string 对浮点数的舍入行为由标准库实现定义(通常是 round-half-to-even),而 stringstream 配合 std::fixed/std::scientific 可稳定复现预期格式。
std::format(头文件 )是 C++20 标准引入、C++17 起部分编译器支持的现代化方案,语法类似 Python 的 str.format() 或 f-string:
std::string s = std::format("value={:.2f}", 3.14159); → "value=3.14"
现阶段,std::to_string 和 std::stringstream 仍是主力,理解它们的边界比盲目追求新特性更重要。
基本上就这些。