C++如何将int转为string_C++11新特性to_string函数用法【转换】

3次阅读

推荐使用 std::to_String,因其简洁、类型安全、跨平台且性能接近 C 风格转换;它仅支持十进制转换,不支持前导零或进制控制,格式化需求应改用 std::stringstream 或 std::format

C++如何将int转为string_C++11新特性to_string函数用法【转换】

直接用 std::to_stringc++11 起标准库就支持,无需手写或依赖第三方。

为什么推荐 std::to_string 而不是 std::stringstreamitoa

它专为基本类型转 std::string 设计,简洁、类型安全、无副作用。相比 std::stringstream,没有状态残留风险;相比非标准的 itoa,跨平台且不依赖 C 运行时扩展。

  • std::to_string 接受 intlonglong longunsigned 系列及浮点类型,自动选择合适重载
  • 不抛异常(仅当输入为 NaN 或无穷大时对浮点数返回固定字符串,如 "nan"
  • 底层调用 snprintf 类机制,性能接近原生 C 风格转换

std::to_string 的基本用法和常见误用

直接传入整数即可,返回值是 std::string 对象

int x = -42; std::string s = std::to_string(x); // s == "-42"

容易出错的地方:

立即学习C++免费学习笔记(深入)”;

  • 忘记加 #include —— 编译报错:”‘to_string’ is not a member of ‘std’
  • 在 C++98/03 项目中误用 —— 链接失败或编译器提示未声明,需确认编译标准(如 -std=c++11
  • 试图用它格式化带前导零或进制(如十六进制)——它只做十进制有符号转换,不支持格式控制

需要格式化(如补零、指定进制)怎么办

std::to_string 不处理格式,此时应切换方案:

  • 补零:先转成 std::to_string,再用 std::string::insertstd::format(C++20)
  • 十六进制:用 std::stringstream + std::hex,或 C++17 起的 std::to_chars(需自行分配缓冲区)
  • 高性能批量转换:std::to_chars 更快但更底层,要手动管理字符数组和错误码

例如补两位零:

int n = 5; std::string s = std::to_string(n); s = std::string(2 - s.length(), '0') + s; // "05"

进制和精度这类需求,std::to_string 从不参与——它只做一件事:把数字按默认十进制规则变成字符串。别指望它变魔术,该换工具时就换。

text=ZqhQzanResources