搜索你想找的开源项目

输入名称、用途或关键词,也可粘贴 GitHub 仓库链接

分享到微信

当前解读页的微信分享二维码

用微信扫一扫打开,点击右上角「···」分享给朋友或朋友圈。

手机上可截屏后,在微信扫一扫中从相册识别二维码。

fmtlib/fmt

开发工具

面向 C++ 开发者的高效类型安全格式化库,可替代 printf 和 iostreams 完成输出与数值格式化。

25,910
3,095
C++
MIT
创建于 13 年前

项目介绍

{fmt} 是一个开源的 C++ 格式化库,提供比 C stdio 和 C++ iostreams 更快、更安全的格式化方式。它实现了 C++20 std::format 和 C++23 std::print,语法接近 Python 的 format,支持用于本地化的位置参数,并内置基于 Dragonbox 的 IEEE 754 浮点格式化器,具备正确舍入与往返保证。它还提供安全的 printf 实现、跨平台 Unicode 支持,以及通过扩展点格式化用户自定义类型的能力。

这个库自包含、无外部依赖,支持较老的编译器,也可以通过 FMT_HEADER_ONLY 宏以仅头文件方式使用。格式字符串可以编译期检查,非法说明符会在编译时报错,而不是等到运行时。API、格式语法和平台支持范围见 fmt.dev。

快速使用

需要 C++ 编译器和 {fmt} 的头文件及库。最小配置只包含 core.h、format.h 和 format-inl.h 三个文件,新版也支持以 C++ 模块方式使用。第一个程序可以这样写(示例):

#include <fmt/core.h>

int main() {
  fmt::print("Hello, world!\n");
}

格式化为字符串会返回 std::string(示例):

std::string s = fmt::format("The answer is {}.", 42);
// s == "The answer is 42."

加入额外头文件可以启用更多功能:fmt/chrono.h 处理日期时间,fmt/ranges.h 打印容器,fmt/color.h 输出终端颜色和样式,fmt/os.h 提供带缓冲的文件输出。具体 API、格式语法和平台说明可查阅官方文档。README 没有给出将库接入现有项目的完整构建命令,安装和链接步骤请以官方文档或所用包管理器为准。

使用约束

目标语言是 C++,核心 API 需要 C++11 或更高版本,部分功能依赖更新的语言标准;编译期格式串检查需要 C++20。仅头文件模式会拉长编译时间,换来更简单的集成方式。库默认与 locale 无关,需要本地化格式时要显式启用。许可证为 MIT,可用于闭源项目。项目说明其有持续 fuzz 和大量测试,但不同平台和编译器版本下的兼容性仍需按实际情况确认。

HotRepo 点评

在 2026 年 9 月 2 日至 11 月 6 日的日榜快照中,这个仓库的 Star 从约 23,963 增至 25,911,其中 9 月 3 日和 4 日分别新增 955 和 681。11 月 6 日它出现在 C++ 日榜第 8 名,全部语言日榜名次没有记录。2020 年 5 月的一个 HN 讨论获得 44 分和 12 条评论,评论者把 fmt 看作 <ostream> 和 <cstdio> 的替代品,并指出其中大量接口已被标准化为 C++20 的 std::format。2025 年关于 {fmt} v12 的讨论提到浮点格式化快 60%、完整 constexpr 和 C++20 模块。这些记录说明该库有长期使用基础,但都是历史快照,不能用来推断当前性能或稳定性。

本文由 AI 根据项目 README 生成,更新于 ,以项目官方文档为准。

Hacker News 讨论

Fmt – A Modern Formatting Library
▲ 44 · 12 条评论 · 2020年5月24日
Fmtlib / fmt A modern formatting library
▲ 7 · 0 条评论 · 2025年7月20日
Fmt: A Modern and Lightweight C++ Formatting Library
▲ 3 · 0 条评论 · 2024年8月14日