fmt 库的核心优势是用法简洁、类型安全、兼容多场景,以下是从基础到进阶的完整使用指南,涵盖常用功能和关键场景。
一、前置准备:环境配置
使用前需确保 fmt 库已集成到项目中
- 编译依赖:链接 fmt 库(CMake 项目直接链接
fmt::fmt目标,非 CMake 项目需手动添加头文件和src/format.cc编译)。
头文件引入:核心功能只需包含主头文件:
#include <fmt/format.h> // 核心格式化功能(fmt::format、fmt::print 等)
#include <fmt/ranges.h> // 容器格式化(可选,如 vector、map)
#include <fmt/chrono.h> // 时间格式化(可选,如 std::chrono)
二、核心用法:格式化输出与字符串构建
fmt 的核心 API 是 fmt::format(构建字符串)和 fmt::print(直接输出),语法兼容 Python 格式化风格,比 printf 更简洁,比 iostreams 更高效。
1. 基础格式化(类似 printf,但更安全)
支持位置参数、类型自动推导,无需手动指定格式符(如 %d %s),错误会在编译时捕获。
#include <fmt/format.h>
#include <iostream>
int main() {
// 1. 基础类型格式化(int、string、float 等)
std::string msg1 = fmt::format("整数:{},字符串:{},浮点数:{:.2f}", 42, "hello", 3.1415);
std::cout << msg1 << std::endl; // 输出:整数:42,字符串:hello,浮点数:3.14
// 2. 位置指定(解决参数顺序问题)
std::string msg2 = fmt::format("第 2 个参数:{1},第 1 个参数:{0}", "A", "B");
std::cout << msg2 << std::endl;
fmt::(, , , );
fmt::(stdout, );
fmt::(stderr, );
;
}

