C++26:std::format 改进(第 1 部分)

主要观点:C++26 对 std::format 进行了一系列改进,包括用 std::format 替换 std::to_stringstd::to_wstring 的算术重载、进行类型检查格式参数、格式化指针、添加成员 std::basic_format_arg::visit() 等,这些改进提高了格式化的一致性、运行时安全性和用户体验,已在部分编译器中可用,且 C++26 对使用 std::format 的人来说是一个很棒的版本,后续还将探讨运行时格式化改进等内容。
关键信息

  • [P2587R3]提议用 std::format 替换算术重载中的 sprintf,能得到更精确简短的输出,此变化已在 GCC 14 可用。
  • [P2757R3]建议增强 basic_format_parse_context 进行编译时类型检查,将潜在运行时错误转为编译时错误,已在 GCC 15 可用。
  • [P2510R3]使指针类型与 std::format 兼容,有零填充和大小写输出等格式,已在 GCC 15、Clang 17 和 MSVC 19.40 可用。
  • [P2637R3]带来成员 visit 函数,已在 GCC 15 和 Clang 18/19 可用。
    重要细节
  • std::to_string 长期存在输出不佳问题,使用 std::format 后更精确简短,且浮点重载输出非本地化。
  • 某些动态格式化规格可能导致运行时错误,[P2757R3]可增强编译时检查。
  • 对于指针类型,之前格式化选项有限,此提案提供了零填充和大小写输出格式。
  • 成员 std::basic_format_arg::visit() 之前是独立函数,此提案改为成员函数,更方便使用。
阅读 12
0 条评论