主要观点:C++26 对 std::format
进行了一系列改进,包括用 std::format
替换 std::to_string
和 std::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()
之前是独立函数,此提案改为成员函数,更方便使用。
**粗体** _斜体_ [链接](http://example.com) `代码` - 列表 > 引用
。你还可以使用@
来通知其他用户。