超厉害!{fmt}开源格式化库快速安全性能优,众多知名项目都在用!
{fmt}开源格式化库快速安全性能卓越众多知名项目都在用{fmt} 是一个开源的格式化库为 C 语言的 stdio 和 C 的 iostreams 提供了一种快速且安全的替代方案。文档与问答可在 StackOverflow 上使用标签 fmt 提问获取文档速查表还能在 Compiler Explorer 中尝试使用 {fmt}。特性{fmt} 具有众多出色特性拥有简单的格式化 API支持使用位置参数进行本地化。实现了 C20 的 std::format 和 C23 的 std::print是 C 标准实现。格式字符串语法与 Python 的 format 类似有类似 Python 的格式化字符串语法。运用 Dragonbox 算法是快速的 IEEE 754 浮点数格式化器保证正确的舍入、简洁性和往返性。提供跨平台的 Unicode 支持具备可移植的 Unicode 特性。是安全的 printf 实现包括对位置参数的 POSIX 扩展。支持用户自定义类型具备可扩展性。高性能比常见标准库实现的 (s)printf、iostreams、to_string 和 to_chars 更快详情可查看速度测试和“每秒将一亿个整数转换为字符串”的测试。代码体积小在最小配置下源代码仅由三个文件base.h、format.h 和 format-inl.h组成编译后的代码体积也很小具体可查看编译时间和代码膨胀测试。可靠性高拥有大量测试用例并持续进行模糊测试。安全性强完全类型安全格式字符串中的错误可在编译时报告自动内存管理可防止缓冲区溢出错误。易于使用代码库小巧且自包含无外部依赖采用宽松的 MIT 许可证。跨平台兼容性好在不同平台上输出一致支持旧版本编译器。代码干净无警告即使在 -Wall -Wextra -pedantic 等高警告级别下代码库也不会产生警告。默认与区域设置无关无需考虑区域设置的影响。可通过 FMT_HEADER_ONLY 宏启用可选的仅头文件配置。更多详情请查看文档。示例输出到标准输出#include fmt/core.hint main() { fmt::print(Hello, world!\n);}格式化字符串std::string s fmt::format(The answer is {}., 42); // s The answer is 42.使用位置参数格式化字符串std::string s fmt::format(Id rather be {1} than {0}., right, happy); // s Id rather be happy than right.输出日期和时间#include fmt/chrono.hint main() { auto now std::chrono::system_clock::now(); fmt::print(Date and time: {}\n, now); fmt::print(Time: {:%H:%M}\n, now);}输出结果Date and time: 2023-12-26 19:10:31.557195597Time: 19:10输出容器#include fmt/ranges.h#include vectorint main() { std::vectorint v {1, 2, 3}; fmt::print({}\n, v);}输出结果[1, 2, 3]在编译时检查格式字符串std::string s fmt::format({:d}, I am not a number);}在 C20 中这会导致编译时错误因为 d 是字符串的无效格式说明符。单线程写入文件#include fmt/os.hint main() { auto out fmt::output_file(guide.txt); out.print(Dont {}, Panic);}这比 fprintf 快达 9 倍。带颜色和文本样式输出#include fmt/color.hint main() { fmt::print(fg(fmt::color::crimson) | fmt::emphasis::bold, Hello, {}!\n, world); fmt::print(fg(fmt::color::floral_white) | bg(fmt::color::slate_gray) | fmt::emphasis::underline, Olá, {}!\n, Mundo); fmt::print(fg(fmt::color::steel_blue) | fmt::emphasis::italic, 你好{}\n, 世界);}在支持 Unicode 的现代终端上的输出效果更佳。基准测试速度测试库方法运行时间 (s)libcprintf0.66libcstd::ostream1.63{fmt}fmt::print0.44Boost Formatboost::format3.89Folly Formatfolly::format1.28{fmt} 是基准测试方法中最快的比 printf 快约 50%。上述结果是在 macOS 15.6.1 上使用 clang -O3 -DNDEBUG -DSPEED_TEST -DHAVE_FORMAT 编译 tinyformat_test.cpp 并取三次运行的最佳结果得出的。在测试中格式字符串 %0.10f:%04d:%g:%s:%p:%c:%%\n 或等效字符串被填充 200 万次输出结果发送到 /dev/null更多详情可参考源代码。在 IEEE754 浮点数和双精度数格式化方面dtoa-benchmark{fmt} 比 std::ostringstream 和 sprintf 快 20 - 30 倍也比 double-conversion 和 ryu 更快。编译时间和代码膨胀format-benchmark 中的 bloat-test.py 脚本用于测试非平凡项目的编译时间和代码膨胀情况。它生成 100 个翻译单元并在每个单元中使用 printf() 或其替代方案 5 次以模拟一个中等规模的项目。以下是在 Apple clang version 15.0.0 (clang - 1500.1.0.2.5)、macOS Sonoma 系统上三次运行的最佳结果优化构建 (-O3)方法编译时间 (s)可执行文件大小 (KiB)剥离后大小 (KiB)printf1.65450IOStreams28.49884{fmt}5.05450tinyformat32.6164136Boost Format55.0530317{fmt} 编译速度快在每次调用的二进制大小方面与 printf 相当在该系统上误差在舍入范围内。非优化构建方法编译时间 (s)可执行文件大小 (KiB)剥离后大小 (KiB)printf1.45450IOStreams27.08868{fmt}4.78784tinyformat28.1185145Boost Format38.9678381为了仅比较格式化函数的开销libc、lib(std)c 和 libfmt 均作为共享库链接。Boost Format 是仅头文件的库因此不提供链接选项。运行测试若要运行测试需参考“构建库”部分了解如何构建库并运行单元测试。基准测试位于单独的仓库 format-benchmark 中要运行基准测试首先需要克隆该仓库并使用 CMake 生成 Makefile$ git clone --recursive https://github.com/fmtlib/format-benchmark.git$ cd format-benchmark$ cmake .然后可以运行速度测试$ make speed-test或者运行代码膨胀测试$ make bloat-test代码迁移clang - tidy v18 提供了 modernize-use-std-print 检查若进行相应配置它能够将 printf 和 fprintf 的调用转换为 fmt::print默认转换为 std::print。使用该库的知名项目众多知名项目都在使用 {fmt} 库0 A.D.一款免费、开源、跨平台的实时策略游戏。AMPL/MP一个用于数学编程的开源库。Apples FoundationDB一个开源的分布式事务性键值存储。Aseprite动画精灵编辑器和像素艺术工具。AvioBook一套全面的飞机运营套件。Blizzard Battle.net一个在线游戏平台。Celestia太空实时 3D 可视化工具。Ceph一个可扩展的分布式存储系统。ccache一个编译器缓存。ClickHouse一个分析型数据库管理系统。ContextVision医学成像软件。Contour一个现代终端模拟器。CUAUV康奈尔大学的自主水下航行器。Drake一个用于非线性动力系统的规划、控制和分析工具箱麻省理工学院。EnvoyC 的 L7 代理和通信总线Lyft。FiveMGTA V 的修改框架。fmtlog一个高性能的 fmtlib 风格的日志库延迟可达纳秒级。FollyFacebook 的开源库。GemRBBioware 无限引擎的便携式开源实现。Grand Mountain Adventure一款精美的开放世界滑雪和单板滑雪游戏。HarpyWar/pvpgn经过优化的玩家对战游戏网络。KBEngine一个开源的大型多人在线游戏MMOG服务器引擎。KeypirinhaWindows 的语义启动器。Kodi原 xbmc家庭影院软件。Knuth高性能的比特币全节点。libunicode一个现代的 C17 Unicode 库。MariaDB关系型数据库管理系统。Microsoft Verona用于并发所有权的研究性编程语言。MongoDB分布式文档数据库。MongoDB Smasher一个用于生成随机数据集的小工具。OpenSpace一个开源的天文可视化框架。PenUltima Online (POL)一个与大多数《网络创世纪》客户端兼容的 MMO 服务器。PyTorch一个开源的机器学习库。quasardb一个分布式、高性能的关联数据库。Quill异步低延迟日志库。QKW将别名泛化以简化导航并执行复杂的多行终端命令序列。redis - cerberus一个 Redis 集群代理。redpanda一个比 Kafka® 快 10 倍的关键任务系统替代方案用 C 编写。rpclib一个现代的 C msgpack - RPC 服务器和客户端库。Salesforce Analytics Cloud商业智能软件。Scylla一个与 Cassandra 兼容的 NoSQL 数据存储单服务器每秒可处理 100 万笔交易。Seastar一个先进的开源 C 框架用于现代硬件上的高性能服务器应用程序。spdlog超快速的 C 日志库。Stellar金融平台。Touch Surgery手术模拟器。TrinityCore开源的大型多人在线角色扮演游戏MMORPG框架。 userver framework开源的异步框架拥有丰富的抽象和数据库驱动。Windows Terminal全新的 Windows 终端。如果您知道其他使用该库的项目请通过电子邮件或提交问题告知。维护者{fmt} 库由 Victor Zverovichvitaut维护同时也有许多其他人员做出了贡献。部分贡献者和版本信息可查看“贡献者”和“版本发布”部分。如果您的贡献未被列出或提及有误请告知我们会及时更正。

相关新闻

HTTPS一键升级脚本实战:从原理到验证的完整指南

HTTPS一键升级脚本实战:从原理到验证的完整指南

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/29 19:18:23 阅读更多 →
石油通信的“透视眼”:鼎讯 DXM系列频谱仪模块如何保障能源动脉

石油通信的“透视眼”:鼎讯 DXM系列频谱仪模块如何保障能源动脉

在广袤的戈壁与深邃的海上,纵横交错的石油管线如同国家的能源动脉,其稳定运行至关重要。维系这条动脉高效运转的,是背后一套庞大而精密的无线通信网络。从井场数据采集到泵站远程控制,任何微小的信号干扰都可能导致数据中断&#…

2026/10/25 1:03:48 阅读更多 →
基于SpringBoot+Vue的教培机构管理系统的设计与实现毕业设计项目源码

基于SpringBoot+Vue的教培机构管理系统的设计与实现毕业设计项目源码

联系博主 温馨提示:本人主页置顶文章(点我)开头有 CSDN 平台官方提供的学长联系方式的名片! 温馨提示:本人主页置顶文章(点我)开头有 CSDN 平台官方提供的学长联系方式的名片! 温馨提示:本人主页置顶文章(点我)开头有 …

2026/10/28 23:57:42 阅读更多 →

最新新闻

Electron桌面应用开发实战:从环境搭建到打包发布全流程

Electron桌面应用开发实战:从环境搭建到打包发布全流程

做前端这些年,我大部分时间都在跟浏览器标签页打交道,直到第一次把桌面应用跑起来,才发现原来自己一直被限制在地址栏和刷新按钮围起来的框框里。Electron这个词,最开始是在某段时间频繁出现在同事的讨论里,一个用HTML…

2026/10/30 0:01:36 阅读更多 →
滑盖智能锁T109深度解析:结构原理、安装调试与故障排查

滑盖智能锁T109深度解析:结构原理、安装调试与故障排查

简介:亚太天能T109滑盖智能锁产品说明书是一份PDF格式的官方技术文档,主要面向智能锁安装人员、终端用户及售后维护者,帮助快速掌握产品安装、配置与常见故障处理。全包仅1个PDF文件,大小4.37MB,内容结构清晰&#xff…

2026/10/30 9:20:34 阅读更多 →
PMSM弱磁控制原理与Simulink建模:高速AGV驱动系统设计指南

PMSM弱磁控制原理与Simulink建模:高速AGV驱动系统设计指南

上个月我在调试一台高速AGV的驱动系统,整车要求空载跑到8m/s,电机转速已经拉到额定点,驱动器的输出电压也顶到了母线电压极限附近。再往上踩速度指令,转速纹丝不动,三相电流反而开始震荡。那会儿我的第一反应就是&…

2026/10/30 10:19:21 阅读更多 →
C++核心知识点:从内存管理到STL的实战指南

C++核心知识点:从内存管理到STL的实战指南

C 这门语言我前前后后折腾了十几年,用它写过嵌入式驱动、做过游戏服务端,也搭过基础组件库。每次看到新人一头扎进"C 核心知识点"这个搜索词,我其实挺感慨的——这门语言的难点从来不是语法多,而是知识点之间的耦合太深…

2026/10/30 0:01:37 阅读更多 →
T109滑盖智能锁怎么装?安装调试与故障排查全攻略

T109滑盖智能锁怎么装?安装调试与故障排查全攻略

简介:亚太天能T109滑盖智能锁产品说明书以PDF格式发布,适合智能锁用户、安装人员与售后维修人员阅读。内容围绕T109系列指纹密码刷卡锁展开,先介绍前面板、后面板、锁体、机械钥匙、电池盒盖等部件名称与功能,再给出完整安装步骤&…

2026/10/30 10:19:39 阅读更多 →
LLM知识降熵:从信息垄断到理解权下放

LLM知识降熵:从信息垄断到理解权下放

你有没有过这种经历:翻开源码注释、论文摘要或者一份专业报告,每个字都认识,连在一起却像天书。想找人聊聊,身边要么没人懂,要么懂的懒得跟你解释。后来我试着把同一段内容丢给一个大语言模型,几秒钟之后&a…

2026/10/30 9:21:37 阅读更多 →

日新闻

周新闻

月新闻

我发现了一个新思路:用 Remotion + Claude Code 像写代码一样自动化生成短视频

我发现了一个新思路:用 Remotion + Claude Code 像写代码一样自动化生成短视频

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/30 17:32:24 阅读更多 →
Windows下 Codex 中 Chrome 和 Computer Use 插件不可用问题排查及解决参考方式:TaoToken 统一 Key 配置与验证

Windows下 Codex 中 Chrome 和 Computer Use 插件不可用问题排查及解决参考方式:TaoToken 统一 Key 配置与验证

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/30 10:28:40 阅读更多 →
黑夜航拍船只数据集训练YOLOV5模型全流程解析

黑夜航拍船只数据集训练YOLOV5模型全流程解析

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/30 0:01:33 阅读更多 →